我正在将传统的 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" />
context.xml
包含在 WAR 中的,具有以下占位符引用:
<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 注入它们。实现它的最优雅的方式是什么?