Прочитайте внешние свойства правильно - PullRequest
0 голосов
/ 03 октября 2019

Как я могу ccr.read.clientSecret значение из override.properties Я нахожусь на Windows 10 Я пытаюсь запустить приложение Spring Boot с помощью командной строки

java -jar -Dspring.profiles.active=local -Dspring.config.location=file:D:/myname/Properties/override.properties myapp-0.0.1-SNAPSHOT.jar

Мой файл JAR имеет application.properties

#tomcat port
server.port=8081

#Spring Batch App
spring.batch.job.enabled=false
spring.profiles.active=

#JPA Properties
spring.jpa.show-sql=false
spring.jpa.hibernae.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.batch.initialize-schema=always 

Мои application-local.properties

accr.read.clientId=JOHN
accr.read.clientSecret=
accr.read.grantType=client_credentials
accr.read.scope=scope1


# Database settings
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.driverClassName=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@devdb.in.world:1522/DEV01
spring.datasource.username=USER$NAME
spring.datasource.password=password123

override.properties

ccr.read.clientSecret=passwordisthis

Когда я выполняю первую команду для запуска приложения весенней загрузки, яПолучите ниже ошибка

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-10-03 15:18:43.675 ERROR 14828 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
        If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
        If you have database settings to be loaded from a particular profile you may need to activate it (the profiles local are currently active).

Ответы [ 3 ]

0 голосов
/ 03 октября 2019

Вам необходимо создать и аннотировать класс с помощью @PropertySource, например:

@PropertySource("${my.config.location}")
@Component
public class Config {

    @Value("${ccr.read.clientSecret}")
    private String clientSecret;

    public String getClientSecret() {
        return clientSecret;
    }

    public void setClientSecret(String clientSecret) {
        this.clientSecret = clientSecret;
    }

    @Override
    public String toString() {
        return "Config{" +
                "clientSecret='" + clientSecret + '\'' +
                '}';
    }
}

. Вы также можете указать @PropertySource для класса конфигурации.

Теперь запустите приложение с помощью-Dmy.config.location=file:D:/myname/Properties/override.properties переменная. Обратите внимание, что я изменил имя переменной по причине, описанной ниже.

Что не так с вашим подходом: -Dspring.config.location указывает на местоположение файла application.properties, но у вас уже есть его в пути к классам. Перезаписывая расположение файла application.properties, вы заменяете существующее из classpath на ...\override.properties, которое не является каталогом.

По умолчанию Spring Boot пытается загрузить application.properties (или application.yml). ) из следующих мест: classpath: /, classpath: / config /, файл: ./, файл: ./ config /. Конечно, мы можем переопределить это. Вы можете изменить имя основного файла конфигурации, установив свойство среды spring.config.name или просто изменив весь путь поиска, установив свойство spring.config.location . Он может содержать имена каталогов, а также пути к файлам.

См. этот пост для получения дополнительной информации.

0 голосов
/ 03 октября 2019

Согласно этому правилу «Если вы указали какие-либо файлы в spring.config.location, профильные варианты этих файлов не рассматриваются. Используйте каталоги в spring.config.location, если вы также хотите использовать специфичные для профиля свойстваmsgstr "специфичный для профиля файл не будет считаться местом использования.

0 голосов
/ 03 октября 2019

Самый простой способ решить вашу проблему - запустить ваше приложение следующим образом:

java -jar -Dspring.profiles.active=local myapp-0.0.1-SNAPSHOT.jar --ccr.read.clientSecret=passwordisthis

Исключение, которое вы видите, состоит в том, что вы указали местоположение, которое имеет только ваши свойства переопределения. Вы должны включить несколько мест (в вашем случае и classpath), чтобы Spring знал, где искать.

Пример:

java -jar -Dspring.config.location=file:D:/myname/Properties/override.properties,classpath:/ myapp-0.0.1-SNAPSHOT.jar

Важно отметить, что подход одновременного использования профиля и файла свойств переопределения может привести к проблемам (поскольку при установке активного профиля свойства наприложение - $ {profile} .properties будет иметь самый высокий приоритет и не будет переопределено, если они существуют).

Полная документация внешних свойств пружины https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...