我正在尝试将spring mvc app转换为spring boot。我曾经在tomcat中部署这个应用程序并进行测试。现在使用spring boot我正在尝试做同样的事情,但我面临加载xml文件配置的问题。
submit(){
//calling functions
this.function1();
this.function2();
}
//declaring functions
function1(){}
function2(){}
这是我正在尝试加载的配置文件。当我把
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Data sources -->
<Environment name="/source/schema" value="${schema}" type="java.lang.String" />
<Resource auth="Container" driverClass="org.postgresql.Driver"
factory="org.apache.naming.factory.BeanFactory"
idleConnectionTestPeriod="30" jdbcUrl="${url}"
maxAdministrativeTaskTime="0" maxConnectionAge="30" maxIdleTime="9" maxPoolSize="3" minPoolSize="2"
name="/source/DataSource" password="${password}"
preferredTestQuery="select 1" testConnectionOnCheckout="true" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="${user}"/>
</Context>
我可以从applicationcontext.xml加载所有bean配置,但是在加载context.xml时它正在提供
@ImportResource({"classpath:applicationContext.xml", "classpath:context.xml"})
在tomcat中部署spring boot app时,如何加载这些条目?
答案 0 :(得分:0)
默认情况下,嵌入式Tomcat中禁用JNDI。您需要调用Tomcat.enableNaming()来启用它。
如果您可以使用Java配置,您可以尝试使用java配置从下面的代码片段中添加JNDI和其他配置。
@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
tomcat.enableNaming();
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
示例:
@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
tomcat.enableNaming();
return super.getTomcatEmbeddedServletContainer(tomcat);
}
@Override
protected void postProcessContext(Context context) {
ContextResource resource = new ContextResource();
resource.setName("jdbc/myDataSource");
resource.setType(DataSource.class.getName());
resource.setProperty("driverClassName", "your.db.Driver");
resource.setProperty("url", "jdbc:yourDb");
context.getNamingResources().addResource(resource);
}
};
}
@Bean(destroyMethod="")
public DataSource jndiDataSource() throws IllegalArgumentException, NamingException {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName("java:comp/env/jdbc/myDataSource");
bean.setProxyInterface(DataSource.class);
bean.setLookupOnStartup(false);
bean.afterPropertiesSet();
return (DataSource)bean.getObject();
}
请查看此github link相关示例
答案 1 :(得分:0)
context.xml
应该进入war文件中的/META-INF/
目录。这是对Tomcat服务器的说明,无需在Spring中进行任何配置即可尝试加载它。