batch attic spring spring-boot spring-batch spring-batch-admin

attic - spring batch download



Cómo sobrescribir Spring-boot application.properties mediante programación (6)

Debajo de la carpeta META-INF crea exactamente estas carpetas y archivos: spring> batch> override> data-source-context.xml y en tu archivo xml asegúrate de anular los parámetros que quieras así:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${loader.jdbc.driver}" /> <property name="url" value="${loader.jdbc.url}" /> <property name="username" value="${loader.jdbc.username}" /> <property name="password" value="${loader.jdbc.password}" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>

o use un jndi como este en el archivo xml para acceder a su archivo de configuración externo como catalina.properties

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/loader-batch-dataSource" lookup-on-startup="true" resource-ref="true" cache="true" />

Tengo archivos de propiedades jdbc que tomo del servicio web de configuración externa. En el arranque de primavera para configurar accesorios mysql, es fácil agregarlos a application.properties:

spring.datasource.url=jdbc:mysql://localhost/mydb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver

¿Cómo podría anularlos programáticamente en mi aplicación?

Lo mismo ocurre con los accesorios de lotes de primavera:

database.driver=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost/mydv database.username=root database.password=root


Puede agregar fuentes de propiedad adicionales en un detector de ciclo de vida reaccionando al evento ApplicationEnvironmentPrepared.

Algo como:

public class DatabasePropertiesListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> { public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { ConfigurableEnvironment environment = event.getEnvironment(); Properties props = new Properties(); props.put("spring.datasource.url", "<my value>"); environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props)); } }

Luego registre la clase en src / main / resources / META-INF / spring.factories:

org.springframework.context.ApplicationListener=my.package.DatabasePropertiesListener

Esto funcionó para mí, sin embargo, está un poco limitado en cuanto a lo que puede hacer en este punto, ya que es bastante temprano en la fase de inicio de la aplicación, tendría que encontrar la manera de obtener los valores que necesita sin depender de otra fuente frijoles etc.


Solo para proporcionar otra opción a este hilo como referencia, ya que cuando comencé a buscar una respuesta para mi requerimiento, este fue uno de los primeros en la lista de búsqueda, pero no cubrió mi caso de uso.

Estaba buscando establecer programáticamente propiedades de arranque de primavera al inicio, pero sin la necesidad de trabajar con los diferentes archivos XML / Config que admite la primavera.

La forma más fácil es establecer las propiedades en el momento en que se define SpringApplication. El ejemplo básico a continuación establece el puerto Tomcat en 9999.

@SpringBootApplication public class Demo40Application{ public static void main(String[] args){ SpringApplication application = new SpringApplication(Demo40Application.class); Properties properties = new Properties(); properties.put("server.port", 9999); application.setDefaultProperties(properties); application.run(args); } }



Así es como puede anular la aplicación.propiedades programáticamente si es necesario.

public static void main(String[] args) { SpringApplication app = new SpringApplication(Restdemo1Application.class); app.setAdditionalProfiles("dev"); // overrides "application.properties" with "application-dev.properties" app.run(args); }


Con este Método en su configuración puede establecer propiedades predeterminadas.

@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class) .properties("propertyKey=propertyValue"); }