Mat*_*ner 7 spring servlet-3.0 spring-boot
现在查看Spring Boot并希望正确地执行它,就像使用Java配置一样,最终没有任何配置web.xml.因此,棘手的部分是生产环境需要经典WAR文件.
因此,我WAR在Maven pom.xml文件中指定了包装,主要的Application类扩展了SpringBootServletInitializer.
工作得很好.现在,棘手的部分是在生产环境中Datasource通过提供JNDI.在经典的Spring应用程序中,您将在web.xml使用a中引用此依赖项,resource-ref如下所示:
<resource-ref>
<res-ref-name>jdbc/DefaultDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
我所做的所有研究似乎表明我可以摆脱web.xml它并用相应的context.xml文件替换它(在META-INF文件夹中):
<Resource name="jdbc/DefaultDB"
auth="Container"
type="javax.sql.DataSource"
factory="com.sap.jpaas.service.persistence.core.JNDIDataSourceFactory"/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用:/
有趣的是,一个简单的servlet3 Web应用程序就可以正常工作,请参阅[ https://github.com/steinermatt/servlet3-sample].
因此,我很想相信它对Spring Boot应用程序不起作用的根本原因与Spring Boot引导程序有关......所以,真正寻找任何提示,建议它可能是什么!
任何帮助表示赞赏!
小智 0
默认情况下,JNDI 在嵌入式 Tomcat 中处于禁用状态。
您可以使用以下代码在 tomcat 中启用 JNDI。以下代码将帮助您初始化 DataSource spring bean。
@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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
您可以通过自动装配在控制器中使用 DataSource bean。
@Autowired
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |