具有Tomcat和JNDI占位符的自包含JAR

时间:2015-12-15 18:06:14

标签: spring tomcat7 jndi self-contained tomcat7-maven-plugin

我正在将传统的Spring 3.2.8应用程序从WAR部署转换为自包含的JAR。我使用 tomcat7-maven-plugin 创建可执行的JAR:

mvn install tomcat7:exec-war

由于应用程序使用JNDI占位符,因此如果没有定义它们,它显然无法运行。在Tomcat安装中,定义了以下占位符:(conf/Catalina/localhost/myapp.xml):

<Resource name="jdbc/mediaagent" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/mediaagent" username="user" password="password"/>
<Environment name="hibernate/dialect" type="java.lang.String" value="PostgreSQL" />

WAR中打包的context.xml具有以下占位符引用:

<ResourceLink name="jdbc/mediaagent" global="jdbc/mediaagent" type="javax.sql.DataSource"/>
<ResourceLink name="hibernate/dialect" global="hibernate/dialect" type="java.lang.String"/>

最后,这些占位符以下列方式用于 applicationContext.xml

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



    <bean id="dataSourceProperties"
              class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <property name="properties">
                <props>
                ...
                    <prop key="hibernate.dialect">org.hibernate.dialect.${dialect}Dialect</prop>
                ...
                </props>
            </property>
        </bean>

我的目标是将这些设置提取到单独的配置文件中,该文件应放在自包含的JAR旁边,最好是属性文件,就像在Spring Boot中一样。还应该有可能像使用WAR文件一样注入JNDI。实现它的最优雅方式是什么?

0 个答案:

没有答案