Мое первоначальное тестирование с Tomcat для настройки JNDI было жестко запрограммировано, и тогда все работало нормально:
Код: Выделить всё
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
return (DataSource) new JndiTemplate().lookup("java:/comp/env/jdbc/myJndiLocal");
}
}
Теперь мои проблемы связаны с org.springframework.boot.autoconfigure.jdbc.DataSourceProperties. . Мои свойства настроены в Application.properties, который находится в моем каталоге ресурсов:
Код: Выделить всё
spring.datasource.url=jdbc:postgresql://localhost:5432/MY_DB?currentSchema=public
spring.datasource.username=postgresql_username
spring.datasource.password=postgresql_password
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.jndiName=jdbc/myJndiLocal
Код: Выделить всё
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
System.out.printf(" !!!!! Datasource Config !!!!! %n" +
" url: %s%n" +
" username: %s%n" +
" password: %s%n" +
" driver: %s%n" +
" jndi: %s%n" +
" jndi full: %s%n",
dataSourceProperties.getUrl(), dataSourceProperties.getUsername(), dataSourceProperties.getPassword(),
dataSourceProperties.getDriverClassName(), dataSourceProperties.getJndiName(),
String.format("java:/comp/env/%s", dataSourceProperties.getJndiName())
);
if (dataSourceProperties.getJndiName() != null && !dataSourceProperties.getUrl().isBlank()) {
try {
return (DataSource) new JndiTemplate().lookup(String.format("java:/comp/env/%s", dataSourceProperties.getJndiName()));
}
catch (Exception e) {
System.out.println(" !!!!! JNDI Resource could not be found! Regular JDBC Configuration will be used instead. !!!!! ");
}
}
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName(dataSourceProperties.getDriverClassName());
dataSourceBuilder.url(dataSourceProperties.getUrl());
dataSourceBuilder.username(dataSourceProperties.getUsername());
dataSourceBuilder.password(dataSourceProperties.getPassword());
return dataSourceBuilder.build();
}
}
Код: Выделить всё
!!!!! Datasource Config !!!!!
url: jdbc:postgresql://localhost:5432/MY_DB?currentSchema=public
username: postgresql_username
password: postgresql_password
driver: org.postgresql.Driver
jndi: jdbc/myJndiLocal
jndi full: java:/comp/env/jdbc/myJndiLocal
!!!!! JNDI Resource could not be found! Regular JDBC Configuration will be used instead. !!!!!
Код: Выделить всё
!!!!! Datasource Config !!!!!
url: null
username: null
password: null
driver: null
jndi: null
jndi full: java:/comp/env/null
Код: Выделить всё
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EntityScan(basePackages = {"com.mycompany.myapp.model", "com.mycompany.model"})
@EnableJpaRepositories(basePackages = {"com.mycompany.dao.jpa"})
@ComponentScan(basePackages = {
"com.mycompany.myapp",
"com.mycompany.service",
"com.mycompany.service.impl",
"com.mycompany.myapp.webapp.pages",
"com.mycompany.webapp.util",
"com.mycompany.webapp.util.migration",
"com.mycompany.myapp.annotations.validation",
"com.mycompany.annotations"
})
public class MyAppApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyAppApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyAppApplication.class, args);
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-tomcat
Мобильная версия