2009-10-09 4 views
4

J'utilise printemps et jambes de force et ont l'entrée suivante dans « /META-INF/context.xml »Est-il possible d'utiliser l'espace réservé dans context.xml

<Context cachingAllowed="false" useHttpOnly="true"> 
<Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" 
      factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
      maxActive="100" maxIdle="30" maxWait="10000" 
      username="xxxxx" password="xxxxx" 
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
      url="jdbc:sqlserver://xxx:1433;databaseName=xxx;"/> 
</Context> 

Est-il possible de mettre en œuvre dans le suivant façon,

<Context cachingAllowed="false" useHttpOnly="true"> 
    <Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" 
       factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="${jdbc.username}" password="${jdbc.pwd}" 
       driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
       url="${jdbc.url}"/> 
</Context> 

Mon applicationContext.xml a obtenu ce qui suit,

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/xxx" /> 
</bean> 

Je veux ramasser les valeurs de jdbc.username et jdbc.pwd à partir d'un fichier de propriétés.

Répondre

1

Il n'est pas possible d'utiliser PlaceholderPropertyConfigurer de Spring (qui remplace uniquement les valeurs dans le contexte Spring).

Il est cependant possible d'utiliser Ant pendant le processus de construction en utilisant la tâche Replace. Quelque chose comme:

<replace file="META-INF/context.xml" replacefilterfile="my.properties" /> 

Notez que ce qui précède prend les noms de propriété comme des jetons à remplacer - par ex. vous aurez besoin d'utiliser "jdbc.url" et non "$ {jdbc.url}" dans votre context.xml. Si ce dernier est absolument requis, il peut être obtenu en nommant explicitement les jetons à remplacer par des éléments <replacefilter> imbriqués.

+0

Merci ChssPly76 pour votre réponse, va essayer de mettre en œuvre cela. – SyAu

1

Pour Tomcat, vous pouvez configurer un pool de connexions dans le fichier server.xml du serveur, de sorte que le nom d'utilisateur/mot de passe se trouve en dehors de votre fichier war. Voici quelques informations sur la façon dont les éléments contextuels se comportent dans Tomcat 5.5 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html

Alternativement, vous pouvez utiliser le package DBCP autonome d'Apache à partir de votre fichier de configuration Spring et utilisez les jdbc.properties pour remplacer votre nom d'utilisateur/mot de passe là-bas. Par exemple:

<context:property-placeholder location="jdbc.properties"/> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"> 
    <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> 
    </property> 
    <property name="url"> 
    <value>${jdbc.url}</value> 
    </property> 
    <property name="username"> 
    <value>${jdbc.username}</value> 
    </property> 
    <property name="password"> 
    <value>${jdbc.password}</value> 
    </property> 
    <property name="initialSize"> 
    <value>30</value> 
    </property> 
    <property name="maxActive"> 
    <value>100</value> 
    </property> 
    <property name="maxWait"> 
    <value>10000</value> 
    </property> 
</bean>