1
@SpringBootApplication
public class SampleTomcatJndiApplication {
public static void main(String[] args) {
SpringApplication.run(SampleTomcatJndiApplication.class, args);
}
@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);
ContextEnvironment contextEnv = new ContextEnvironment();
contextEnv.setName("test/value");
contextEnv.setType("java.lang.String");
contextEnv.setOverride(false);
contextEnv.setValue("testing");
context.getNamingResources().addEnvironment(contextEnv);
}
};
}
@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();
}
在上面的代碼是有可以從一個bean(正如數據源豆工程)訪問測試/值方式???彈簧引導 - JNDI值查找
我已經嘗試了很多方法,但似乎沒有任何工作。我可以使用(new InitialContext().lookup("java:comp/env/test/value")
)從控制器訪問測試/值。
爲什麼你甚至想要使用JNDI。它增加了什麼,你正在使用一個嵌入式容器,所以你可以通過將數據源聲明爲普通的bean而不是JNDI來達到同樣的效果。恕我直言,你正在使事情更復雜,然後需要。 –