Spring Boot Application не чтение приложения. ПрозрачныеJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot Application не чтение приложения. Прозрачные

Сообщение Anonymous »

Я пытаюсь развернуть приложение Spring Boot в качестве войны в Tomcat. Когда у меня есть вещи жестко, это работает просто отлично, и проблем нет. Но после моего первоначального тестирования я попытался почистить вещи и вернуться к свойствам. И я обнаружил, что мой файл Application.Properties не читается приложением во время развертывания в Tomcat. И я просто смущен.@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
return (DataSource) new JndiTemplate().lookup("java:/comp/env/jdbc/myJndiLocal");
}
}
< /code>
my context.xml хорош, и настраиваются глобальные ресурсы My Tomcat Server.xml. Связь была сделана, и все сработало. Конечно, жесткий кодировку-это не то, что я хочу, поэтому я переключился на свойства. Я настроен на свои свойства в Application.properties, который находится в моем каталоге ресурсов: < /p>
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
< /code>
и я создал конфигурацию данных, которая подготавливает подключение к базе данных: < /p>
@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();
}
}
< /code>
Первый оператор Printf предназначен только для текущей отладки, и я удалю его позже. Моя цель состоит в том, чтобы по умолчанию в JNDI, если он присутствует, в противном случае используйте стандартную конфигурацию JDBC. Работая как банка со встроенным Tomcat через мою IDE, проблем нет. Свойства считываются на место, и все настраивается, как я ожидаю. < /P>
!!!!! 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. !!!!!
< /code>
Проблема сейчас, однако, заключается в том, что все мои свойства полностью нулевы при развертывании в виде войны во внешнее Tomcat. < /p>
!!!!! Datasource Config !!!!!
url: null
username: null
password: null
driver: null
jndi: null
jndi full: java:/comp/env/null
< /code>
Я использую Springbootservletinitialize для развертывания войны, поэтому я должен предположить, что это вызывает какую -то проблему, но в настоящее время у меня есть потеря относительно того, что это такое. < /p>
@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);
}
}
< /code>
Я нахожусь в последней весенней загрузке, 3.3.4 и использую последний Tomcat, 10.1.31. Я также использую Maven для зависимостей и сборки. Я уже подтвердил, что приложение. Почему мои свойства не читаются в приложении, и что я могу сделать, чтобы решить это? Я делал некоторое чтение и нашел этот вопрос, который похож, но я ничего не делаю внутри своего основного метода. DataSourceProperties - это весенний класс по умолчанию, поэтому я бы ожидал, что он просто заполнится. Использование его в качестве параметра для моего метода конфигурации я бы ожидал, что он заставит jumpstart, даже если он не был подготовлен автоматически. Мне нужно было добавить аннотацию @propertysource в мой DataSourceConfig. Как только я это сделал, все мои свойства были на месте, и все было хорошо загружено, подключившись к моим определенным JNDI. < /P>
@Configuration
@PropertySource("classpath:Application.properties")
public class DataSourceConfig {
....
}
< /code>
Итак, Application.properties явно уже должно было быть на пути к классу, чтобы эта аннотация работала должным образом. Теперь я в основном смущен, почему его не использовалось в приложении? Есть ли что -то в развертывании Tomcat или моей текущей конфигурации, которая заставляет Spring использовать свои собственные внутренние значения по умолчанию и игнорировать мои файлы конфигурации? Документация говорит мне, что файл следует забрать автоматически.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-tomcat

Вернуться в «JAVA»