Чтобы узнать о приоритете, обратитесь к

гружаем свойства из внешнего файла, используя@PropertySources, Теперь я хочу включить / отключить@Aspect основанный на собственности. Я пытался с помощью@ConditionalOnExpression который не работал. Я попробовал то же самое, создав бобpropertyplaceholderconfig, Даже в том же случае это не сработало. Потом я попробовал@profile который также не работал изначально.

Я понял, что эти переменные не инициализируются приpropertysource или жеpropertyplaceholder бин используется при запуске. Некоторые переменные всегда игнорируются, например (logging.file). Но@Value работает отлично. Чтобы установить эти переменные, я должен передать их как параметры JVM.

Итак, мои вопросы:
1. Как я могу заставить Spring всегда читать указанные файлы свойств при запуске и уважать их все?
2. Какой самый лучший способ включить / отключить@Aspect, С помощью@profile или же@ConditionalOnExpression или что-то другое?

В настоящее время мы устанавливаемlogging.file в основном методе, так как это также ведет себя так же. Но вы, ребята, знаете, что это неправильный способ, так как я могу добавить свойства по одному, как это. Я хочу поместить все свойства во внешние файлы, чтобы Spring читал эти файлы и устанавливал их свойства.

Структура нашей недвижимости:

common.properties # Это имеет все общие свойстваservice.properties # Свойство, специфичное для службы. Это также будет содержать существующее свойство из common.properties, которое будет переопределено.

Я понимаю, что могу использовать профили. Но мы хотим, чтобы свойства оставались такими, что вам нужно перезапустить службу, если вы изменяете свойства. Я также не хочу передавать переменные как параметры JVM, тогда я должен передать большинство переменных таким образом. Передать -Dspring.config.location также сложно, так какcommon.properties а такжеservice.properties используются, и имя файла «service.properties» варьируется для каждой службы.

примеры кодов:

MainClass:

@PropertySources({
        @PropertySource(value = "file:${property_path}/common.properties", ignoreResourceNotFound = false),
        @PropertySource(value = "file:${property_path}/service1.properties", ignoreResourceNotFound = true) })
public class MainClass {
static String logDirectory = ApplicationContext.getGlobalProperty("logging.file");

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(MainClass.class);

        Properties properties = new Properties();
        properties.put("logging.file", logDirectory);
    ,    springApplication.setDefaultProperties(properties);
        springApplication.run(args);
    }
}

Контекст приложения:

@Configuration
@EnableAutoConfiguration
public class ApplicationContext implements EnvironmentAware {

    private static Environment environment;

    @Override
    public void setEnvironment(Environment environment) {
        ApplicationContext.environment = environment;
    }
    public static String getGlobalProperty(String propertyName) {
    return environment.getProperty(propertyName);
    }
}

Здесь вы можете увидеть любой способ, которым я пользовалсяenvironment получитьproperty, Есть ли способ установить свойство с помощью среды, чтобы при самой весенней загрузке заполнялись свойства?

Мы также можем реализоватьApplicationContextInitializer и переопределитьinitialize метод для чтения свойств. Но как я могу сделать так, чтобы он прочитал 2 файла свойств и переопределил свойство duplicate на самое последнее значение?Ссылка (я не уверен, как реализовать мои требования таким образом.), Даже в этом случае не похоже, что вы пытаетесь убить комара молотком?

Текущее рабочее решение:

@Aspect
@Profile("!production")
@Configuration
public class ControllerAspect {
@pointcut(....)
} //Here also I've to pass spring.profiles.active as JVM params.
//setting the value in common.properties or service1.properties is not working. 

Я новичок в весенней загрузке, поэтому, пожалуйста, дайте мне знать для дополнительных разъяснений.

Ответы на вопрос(1)

Ваш ответ на вопрос