2016-11-29 57 views
2

我無法使用環境屬性設置數據庫連接。環境變量 - Spring,Tomcat

應用程序使用Spring構建,並運行在Tomcat容器(7.0.52)中。

XML文件設置:

<bean id="dataSource" 
     class="com.mchange.v2.c3p0.ComboPooledDataSource" 
     p:driverClass="com.mysql.jdbc.Driver" 
     p:jdbcUrl="jdbc:mysql://${CONF_MYSQL_HOST}:${CONF_MYSQL_PORT}/${CONF_MYSQL_DATABASE}" 
     p:user="${CONF_MYSQL_LOGIN}" 
     p:password="#${CONF_MYSQL_PASSWORD}" 
     p:minPoolSize="6" 
     p:maxPoolSize="18" /> 

<context:property-placeholder properties-ref="casProperties" 
           system-properties-mode="FALLBACK"/> 

當運行

echo $CONF_MYSQL_HOST 

變量值正確打印。

我也試圖通過setenv.sh放在CATALINA_HOME /斌/「傳遞價值:

export CONF_MYSQL_HOST=$CONF_MYSQL_HOST 
export CONF_MYSQL_PORT=$CONF_MYSQL_PORT 
export CONF_MYSQL_DATABASE=$CONF_MYSQL_DATABASE 
export CONF_MYSQL_LOGIN=$CONF_MYSQL_LOGIN 
export CONF_MYSQL_PASSWORD=$CONF_MYSQL_PASSWORD 

,但一切都沒有改變。

在日誌文件中我只看到:

jdbcUrl -> jdbc:mysql://:/ 

回答

0

我會在評論添加這個,但我沒有必要點聲望呢。

如果您使用命令行界面啓動tomcat,則應使用特殊的Spring表達式變量來引用它們來解析環境變量。

您是否嘗試用每個變量的相應的Spring表達式語言表達式#{systemEnvironment ['CONF_MYSQL_LOGIN']}替換$ {CONF_MYSQL_LOGIN}。

+0

更改爲'systemEnvironment'沒有幫助。 'systemProperties'也被選中。 – mateusz

1

我會建議做JavaConfig這樣的:

@Configuration 
public class DatabaseConfig { 

    private Environment env; 

    @Autowired 
    public DatabaseConfig(Environment env) { 
    this.env = env; 
    } 

    @Bean 
    public DataSource dataSource() { 
    ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
    dataSource.setDriverClass("com.mysql.jdbc.Driver"); 
    String jdbcUrl = String.format("jdbc:mysql://%s:%s/%s", env.getProperty("CONF_MYSQL_HOST"), 
       env.getProperty("CONF_MYSQL_PORT"), env.getProperty("CONF_MYSQL_DATABASE")); 
    dataSource.setJdbcUrl(jdbcUrl); 
    dataSource.setUser(env.getProperty("CONF_MYSQL_LOGIN")); 
    dataSource.setPassword(env.getProperty("CONF_MYSQL_PASSWORD")); 
    dataSource.setMinPoolSize(6); 
    dataSource.setMaxPoolSize(18); 

    return dataSource; 
    } 
} 

希望這有助於!