Apply additional .yml file in Spring Cloud app - spring

I have a Spring Cloud app into which I would like to have additional .yml configuration file.
I don't want to use Spring profiles. In my case I need to add additional .yml file as external file. Is there some solution?

Related

Spring Log4j2 xml file location

using Spring 2.0.5 with Log4j2
Have found works as expected if I place the file log4j2.xml in the resources folder.
However, have found the log4j2 option of monitorInterval="60" to be super useful as if some production issue can increase logging on some class without a restart. However if log4j2.xml is embedded in the jar of course it cannot be modified. so far the best I have been able to do is use 2 copies of log4j2.xml one in the resources and the other in the folder running the jar from.
I can then run:
java -Dlog4j.configurationFile=log4j2.xml -jar myapp.jar
it seems to work the same if started from the maven spring-boot plugin or from Eclipse.
Have tried a number of things such as setting the classpath, the absolute file name etc. but no luck
My question is how can I remove the log4j2.xml file from the resources folder and only specify it on the command line when starting spring?
I am not entirely clear on your question but I can provide the following information which I hope addresses it:
Log4j 2.12.0 added support for Spring Cloud Config and enhanced the support for Spring Boot. As of that version you can include a file named log4j2.system.properties and place any system properties you want defined there. They will be set before Log4j initializes. So you can specify the full URL to the configuration there if you want instead of the command line. You can also add the definition to a file named log4j2.component.properties.
The support for Spring Cloud Config allows you to place the configuration in your Spring Cloud Config server. See Spring CLoud Config support for more details.
Spring Boot initializes logging at least 3 times. The first is usually because the SpringApplication class declares a Logger so logging is initialized before anything else happens. The configuration for that will use "normal" log4j 2 initialization. After that Spring influences how logging initialization occurs primarily because Spring Boot sets the class path to include the jars inside BOOT-INF/lib directory inside your Spring Boot jar.
By using one of the configuration options I outlined above you can move the logging configuration outside of your application and you should not require a logging configuration in the resources directory. In fact, if you look at the sample Spring Cloud Config Application in Log4j you will see it does not include a configuration file in it.

Passing configuration from yaml file to spring boot application without rebuilding it

How to pass configuration through yaml file to a running spring boot application so that there is no need of rebuilding the application and changes are reflected while the application is runnig?
I think this can help you:
How to hot-reload properties in Java EE and Spring Boot?
Take a look at Spring Boot Cloud Config. It allows you to manage your config files centralized and has the ability to push new configurations to the connected applications.

How to configure log4j write to file only in spring boot?

Is that possible with one config?
log4j write log to file only when we run project as:java -jar project.jar &
log4j write log to file and print on console when we run project in eclipse
Maybe you can have a look at this answer, which seems to describe the same problem.
By using different Spring's profiles, you can switch from one configuration to another very easily, with multiple application.properties files which contains the property logging.config pointing on different log4j config files.
An other option is to use the default Spring Boot's logging mechanism, Logback which allows you to use the <springProfile> tag. See here for more details.

Spring Boot external configuration without ignoring the packaged configuration

I am developing a Spring Boot JAR application and what I want is for some configuration properties to be found in an external path. I want something like this:
the jar to be located at /home/myapps/my-spring-boot-app.jar
the configuration to be located at /apps/configuration/app/config.properties
I have set the spring-boot-maven-plugin with layout:ZIP and I have tried with different configurations like spring.config.location="/apps/configuration/app/" and loader.path="/apps/configuration/app/" and it didn't work.
In some cases, it ignored my external configuration, and in some cases, it ignored my packaged configuration. I don't want to use the Spring Boot defined hierarchy, to have the configuration in ./config/
Thanks for the help
Acording to documentation: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html spring.config.location can accept more than one file, so you can try something like this:
spring.config.location=classpath:/application.properties,/apps/configuration/app/config.properties
or just directories:
spring.config.location=classpath:/,/apps/configuration/app/

Can a Library jar read properties from Spring Cloud Config Server?

I have a shared Library that needs some properties from a .properties file. This shared Library will be used by a Spring Boot application. We already have a Spring Cloud Config server which is serving the properties to this Spring Boot application.
Now, we want the properties for the Library also to be fetched from the Config Server, rather than packaging it's properties file along with the library jar file.
Can I let my Library file pick-up properties from the Spring Cloud Config server ? The Spring Cloud Config server documentation states the following.. seeing it, looks like only a 'Spring Boot' application can talk to the Spring Cloud Config Server to fetch properties from there.
Any pointers or suggestions ?
can be used with any application running in any language
To use these features in an application, just build it as a Spring
Boot application that depends on spring-cloud-config-client
Ref: http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_spring_cloud_config_client
No, a Library cannot talk to the Spring Cloud Config Server to get the properties file. Instead the config server should have those Library file's properties define din the using application's properties file.
Library: x.jar
Application: y.jar
Property file in Config Server: y.properties / y.yml
This property file will have the properties for classes present both in x.jar and in y.jar

Resources