as propiedades de arranque de @Spring se cargarán en la inicialización y respetarán y controlarán a @Aspect en función del valor del archivo de propiedades

Estamos cargando propiedades desde un archivo externo usando@PropertySources. Ahora quiero habilitar / deshabilitar@Aspect basado en una propiedad. Intenté usar@ConditionalOnExpression que no funcionó. Intenté lo mismo creando un bean depropertyplaceholderconfig. Incluso en el mismo caso, no funcionó. Entonces probé@profile que tampoco funcionó inicialmente.

o que descubrí es que estas variables no se inicializan al inicio cuandopropertysource opropertyplaceholder bean se usa al inicio. Algunas variables siempre se ignoran como (logging.file). Pero@Value funciona bien. Para establecer estas variables, tengo que pasarlas como parámetros JVM.

Así que mis preguntas son:
1. ¿Cómo puedo hacer que Spring lea siempre los archivos de propiedades especificados al inicio y los respete a todos?
2. ¿Cuál es la mejor manera de habilitar / deshabilitar@Aspect. Utilizando@profile o@ConditionalOnExpression ¿o algo mas

Actualmente, estamos configurandologging.file en el método principal ya que esto también se comporta de la misma manera. Pero ustedes saben que no es la forma correcta, ya que puedo terminar agregando las propiedades una por una como esta. Quiero poner todas las propiedades en archivos externos para que Spring lea esos archivos y establezca sus propiedades.

Nuestra estructura de propiedades:

common.properties # Esto tiene todas las propiedades comunes service.properties #Propiedad específica de un servicio. Esto también contendrá la propiedad existente de common.properties que se anulará.

Entiendo que puedo usar perfiles. Sin embargo, queremos mantener las propiedades fuera, por lo que debe reiniciar el servicio si está cambiando las propiedades. Tampoco quiero pasar las variables como parámetros JVM, entonces tengo que pasar la mayoría de las variables de esta manera. Pasar -Dspring.config.location también es difícil ya quecommon.properties yservice.properties se utilizan y el nombre de archivo 'service.properties' varía para cada servicio.

códigos de muestra:

Clase principal

@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);
    }
}

Contexto de la aplicación:

@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);
    }
}

Aquí puedes ver cualquier forma en que he usadoenvironment Llegarproperty. ¿Hay alguna forma de establecer la propiedad utilizando el entorno de modo que, mientras que la inicialización de arranque de primavera en sí misma, las propiedades se llenen?

También podemos implementarApplicationContextInitializer y anularinitialize método para leer propiedades. Pero, ¿cómo puedo hacer que lea 2 archivos de propiedades y anule la propiedad duplicada con el último valor? @Referencia (no estoy seguro de cómo implementar mis requisitos de esta manera).. ¿Incluso en este caso no parece que intentas matar un mosquito con un martillo?

Solución de trabajo actual:

@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. 

Soy un novato en el arranque de primavera, así que avíseme para obtener aclaraciones adicionales.

Respuestas a la pregunta(1)

Su respuesta a la pregunta