2016-11-29 4 views
2

Je n'ai pas pu configurer la connexion à la base de données en utilisant les propriétés d'environnement.Variables d'environnement - Spring, Tomcat

L'application est créée avec Spring et s'exécute dans le conteneur Tomcat (7.0.52).

XML configuration du fichier:

<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"/> 

Quand je lance

echo $CONF_MYSQL_HOST 

valeur de la variable est imprimée correctement.

J'ai essayé aussi de transmettre des valeurs par setenv.sh placé dans CATALINA_HOME/bin/':

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 

mais rien n'a changé.

Dans le fichier journal je ne vois que:

jdbcUrl -> jdbc:mysql://:/ 

Répondre

0

J'ajouterais ceci dans un commentaire, mais je n'ai pas encore les points de réputation nécessaires.

Si vous démarrez votre tomcat à l'aide d'une interface de ligne de commande, vos variables d'environnement doivent être résolues en utilisant une variable d'expression Spring spéciale pour les référencer.

Avez-vous essayez de remplacer $ {} CONF_MYSQL_LOGIN avec l'expression de la langue d'expression de ressort correspondant # {systemEnvironment [ 'CONF_MYSQL_LOGIN']} pour chacune de vos variables.

+0

La modification de 'systemEnvironment' n'aide pas. 'systemProperties' également vérifié. – mateusz

1

Je suggère de faire JavaConfig comme ceci:

@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; 
    } 
} 

Hope this helps!