Приложение Spring Boot не читает Application.properties в TomcatJAVA

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

Сообщение Anonymous »

Я пытаюсь развернуть приложение весенней загрузки как WAR в Tomcat. Когда у меня что-то жестко запрограммировано, все работает нормально, и проблем нет. Но после первоначального тестирования я попытался навести порядок и вернуться к свойствам. И я обнаружил, что мой файл application.properties не читается приложением во время развертывания в Tomcat. И я просто в замешательстве.
Мое первоначальное тестирование с Tomcat для настройки JNDI было жестко запрограммировано, и тогда все работало нормально:

Код: Выделить всё

@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
return (DataSource) new JndiTemplate().lookup("java:/comp/env/jdbc/myJndiLocal");
}
}
Мой context.xml в порядке, и глобальные ресурсы server.xml моего кота настроены. Соединение установилось, и все заработало. Конечно, я не хочу жестко запрограммировать, поэтому я переключился на свойства.
Теперь мои проблемы связаны с 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();
}
}
Первый оператор printf предназначен только для текущей отладки, и я удалю его позже. Моя цель — использовать по умолчанию JNDI, если он присутствует, в противном случае используйте стандартную конфигурацию JDBC. При запуске JAR со встроенным tomcat через мою IDE проблем не возникает. Свойства считываются на свои места, и все настраивается так, как я ожидал.

Код: Выделить всё

 !!!!! 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.  !!!!!
Однако проблема заключается в том, что все мои свойства имеют полное значение null при развертывании в виде файла WAR во внешнем Tomcat.

Код: Выделить всё

 !!!!! Datasource Config !!!!!
url: null
username: null
password: null
driver: null
jndi: null
jndi full: java:/comp/env/null
Я использую SpringBootServletInitializer для развертывания WAR, поэтому должен предположить, что это вызывает какую-то проблему, но сейчас я не понимаю, что это такое.< /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);
}
}
Я использую последнюю версию Spring Boot, 3.3.4, и последнюю версию Tomcat, 10.1.31. Я также использую Maven для зависимостей и сборок. Я уже подтвердил, что Application.properties находится в правильном месте файла WAR — /WEB-INF/classes/Application.properties. Почему мои свойства не считываются в приложении и что я могу сделать, чтобы решить эту проблему? Я немного почитал и нашел этот вопрос, который похож, но я ничего не делаю внутри своего основного метода. DataSourceProperties — это класс Spring по умолчанию, поэтому я ожидал, что он просто заполнится. Я ожидал, что использование его в качестве параметра моего метода конфигурации приведет к принудительному запуску, даже если он не был подготовлен автоматически.

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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