我无法使用环境属性设置数据库连接。
应用程序是使用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
正确打印变量值。
我还尝试通过放置在CATALINA_HOME / bin /'中的setenv.sh传递值:
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 :(得分: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;
}
}
希望这有帮助!
答案 1 :(得分:0)
我会在评论中添加此内容,但我还没有必要的声誉点。
如果使用命令行界面启动tomcat,则应使用特殊的Spring表达式变量来解析环境变量以引用它们。
您是否尝试将$ {CONF_MYSQL_LOGIN}替换为每个变量的相应Spring Expression语言表达式#{systemEnvironment [&#39; CONF_MYSQL_LOGIN&#39;]}。