我有多个属性文件,我想从类路径加载.有一个默认设置/src/main/resources属于myapp.jar.我springcontext希望文件在类路径上.即
<util:properties id="Job1Props"
location="classpath:job1.properties"></util:properties>
<util:properties id="Job2Props"
location="classpath:job2.properties"></util:properties>
Run Code Online (Sandbox Code Playgroud)
我还需要使用外部集覆盖这些属性的选项.我有一个外部配置文件夹cwd.根据spring boot doc配置文件夹应该在classpath上.但是从doc中不清楚它是否只会覆盖applicaiton.propertiesconfig中的那个或所有属性.
当我测试它时,只会application.properties被拾取,其余的属性仍然从中获取/src/main/resources.我已经尝试将它们作为逗号分隔列表提供给spring.config.location但是默认设置仍然没有被覆盖.
如何使多个外部配置文件覆盖默认配置文件?
作为我目前使用的解决方法app.config.location(app特定属性),我通过命令行提供.即
java -jar myapp.jar app.config.location=file:./config
Run Code Online (Sandbox Code Playgroud)
然后我改变applicationcontext了
<util:properties id="Job2Props"
location="{app.config.location}/job2.properties"></util:properties>
Run Code Online (Sandbox Code Playgroud)
这就是我在加载Application时在文件和类路径之间进行分离的方法.
EDITS:
//psuedo code
if (StringUtils.isBlank(app.config.location)) {
System.setProperty(APP_CONFIG_LOCATION, "classpath:");
}
Run Code Online (Sandbox Code Playgroud)
我真的不想使用上面的解决方法,并让spring覆盖类路径上的所有外部配置文件,就像它对application.properties文件所做的那样.
我正在使用Spring Booot MVC 1.2.2.RELEASE.我有我的多模块项目,结构如下:
example-backend-development(parent)
---> example-backend-development-domain
---> example-backend-development-service
Run Code Online (Sandbox Code Playgroud)
我想让两个模块独立,或者至少从服务域创建域,因为服务在其类路径中具有域模块.因此,两个模块都将application.properties文件放在各自的资源文件夹中.我想这样做,因为我不想处理来自服务模块的所有属性(例如,属于域模块的Jpa属性).
例如,我在服务模块中有这个application.properties
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.level.com.example.movies: DEBUG
Run Code Online (Sandbox Code Playgroud)
而这一个在域模块中
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sarasa_db
spring.datasource.username=root
spring.datasource.password=mypassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=true
Run Code Online (Sandbox Code Playgroud)
问题是当我启动我的服务时,因为它们都是application.properties在服务类路径中,然后它将来自服务的application.properties替换为来自域的另一个.如果它们具有相同的名称,我想合并它们,就像这种情况一样.这里的春天记录(DEBUG + INFO)
:: Spring Boot :: (v1.2.2.RELEASE)
2015-05-12 15:06:24.794 DEBUG 7728 --- [ main] o.s.w.c.s.StandardServletEnvironment : Adding [servletConfigInitParams] PropertySource with lowest search precedence
2015-05-12 15:06:24.797 DEBUG 7728 --- [ main] o.s.w.c.s.StandardServletEnvironment : Adding [servletContextInitParams] PropertySource with lowest search precedence
2015-05-12 15:06:24.798 DEBUG 7728 --- [ main] o.s.w.c.s.StandardServletEnvironment : Adding [systemProperties] PropertySource with lowest search …Run Code Online (Sandbox Code Playgroud) 如果我创建一个具有application.properties定义通用配置的公共库.喜欢:
spring.main.banner-mode=off
如何将这些属性继承到另一个包含那些公共库的项目中?
Maven的:
<project ...>
<groupId>de.mydomain</groupId>
<artifactId>my-core</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<!-- this one holds the common application.properties -->
<groupId>my.domain</groupId>
<artifactId>my-commons</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
我怎样才能继承从配置my-commons到 my-core?
我有maven程序集插件的问题.
我有一个使用几个罐子的maven项目.每个jar包含配置文件.在另一个项目中,我使用maven程序集插件来组装独特jar中的所有配置.
一切正常,但不幸的是,两个文件名相同,第二个文件覆盖第一个.
我没有实现告诉maven合并两个文件而不是覆盖.
有人知道怎么做吗?
谢谢.
我有两个 Spring Boot 应用程序。第一个是 API 库,它作为依赖 jar 被拉入第二个(Web 应用程序)。
第一个是 API 库,其中包含在 IBM 解决方案中创建“案例”的函数。它是一个独立的类型 jar,具有一个服务类,该服务类公开 getCaseXMLForDocId(String docId) 或 createCaseForAgreementNumber(StringgreementNumber) 等方法
第一个名为 CaseInitationAPI 的库有一个 application.properties 文件,其中包含多个属性。例如:
caseinvocation.query.fetchNonProcessedCaseXml=SELECT Id, CaptureSource, AgreementNumber, CaptureSourceID FROM CaseInvocation WHERE ProcessIndicator IN (0, 2)
Run Code Online (Sandbox Code Playgroud)
服务类有一个进行查询的方法,从使用 application.properties 文件中的属性填充的成员变量中获取查询字符串:
@Value("${caseinvocation.query.fetchNonProcessedCaseXml}")
private String selectNonProcessedQueryString;
Run Code Online (Sandbox Code Playgroud)
第二个 SpringBoot 应用程序是一个具有 REST 控制器的 Web 应用程序。这些控制器公开调用 CaseInitationAPI 库(特别是 CaseInitationService 类)的端点。
我遇到的问题是,当 SpringBoot WEBAPPLICATION 启动时,上下文配置会崩溃,并出现以下错误:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'caseinvocation.query.fetchNonProcessedCaseXml' in string value "${caseinvocation.query.fetchNonProcessedCaseXml}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:219)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:193)
at …Run Code Online (Sandbox Code Playgroud) 我在为多模块Maven项目正确设置Spring Boot时遇到问题。
没有使用另一个模块“核心”的模块“ api”。Api有一个application.properties文件,其中包含spring.mail.host = xxx。根据spring boot文档,这为您提供了JavaMailSender接口的默认实现,可以自动连接。
但是,负责发送电子邮件的类位于“核心”程序包中。当我尝试构建该模块时,构建失败,因为找不到JavaMailSender的实现。
然后我的猜测是,邮件配置应驻留在单独的application.properties的“核心”中。我创建了该文件,并将spring.mail.host属性从“ api”移至“ core”属性文件。
这次核心模块成功构建,但是由于相同的异常,“ api”构建失败,所以我认为我只是提出了问题。
我无法充分理解处理此类情况所需的结构,因此我想知道具有包含所有正确配置的“核心”模块的正确方法是什么,该模块包含用于发送邮件的所有正确配置,并让其他模块使用邮件代码和config驻留在其中。