环境变量 - Spring,Tomcat

时间:2016-11-29 17:06:37

标签: spring spring-mvc tomcat cas

我无法使用环境属性设置数据库连接。

应用程序是使用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://:/

2 个答案:

答案 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;]}。