我有此配置,需要用于Spring Boot应用程序。
java -jar app.jar --spring.config.location=classpath:/another-location.properties
默认情况下,spring-boot会拾取src / main / resources /
中的application.properties文件。我想更改此路径并将Spring Boot引导到其他application.properties文件
我可以使用
实现 @PropertySource("file:C:\Users\test\.test\test.properties")
@ConfigurationProperties(prefix = "spring")
public class Configuration {
private String ddlAuto;
private String url;
private String username;
private String password;
private String driverClassName;
}
在不通过命令行传递args的情况下,是否有其他解决方案可以实现?
我在用这个
@SpringBootApplication
@EnableConfigurationProperties(Configuration.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在我的主班上
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target org.springframework.boot.context.properties.bind.BindException:
在我尝试执行该应用程序之后,在src / main / resources /下的application.properties中注释掉了所有数据源属性 但是它一直给我以下错误,并且应用程序无法启动
我指的是本教程:https://www.mkyong.com/spring-boot/spring-boot-configurationproperties-example/
但是正如提到的那样,当我启动spring boot应用程序时出现此错误
curl https://localhost/input.php --insecure -L --form "id=myId" --form "file[]=@/tmp/myFile"
对此将有任何帮助
答案 0 :(得分:2)
具有外部化属性的推荐方法是使用spring.config.location系统属性,如下所示启动应用程序:
obj
之所以这样做,是因为您没有在代码和文件系统层次结构之间添加耦合。
在Spring Boot 2.0之前,此属性是可加的,这意味着它将补充默认位置。在Spring Boot 2.0之后,spring.config.location将替换默认位置(例如classpath src / main / resources / application.properties)。要在2.0之后保持可加性,请改用spring.config.additional-location。
请在此处查看official documentation。
答案 1 :(得分:0)
我能够使其在Spring Boot 2.1.2.RELEASE上正常工作。这是我所做的:
我的test.properties
文件夹中有一个/tmp
,其中包含以下内容:
test.myprop=hello
我在资源文件夹中也有通常的属性文件:
myprop=world
我为自定义属性文件创建了一个类:
@Configuration
@PropertySource("file:/tmp/test.properties")
@ConfigurationProperties(prefix = "test")
public class TestConfig {
private String myprop;
public String getMyprop() {
return myprop;
}
public void setMyprop(String myprop) {
this.myprop = myprop;
}
}
然后在主类中,我启用了配置属性:
@EnableConfigurationProperties(TestConfig.class)
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
现在我有这个测试控制器:
@RestController
public class TestController {
@Value("${test.myprop}")
private String externalisedProp;
@Value("${myprop}")
private String prop;
@GetMapping("test")
public void test() {
System.out.println("externalised: " + externalisedProp);
System.out.println("not externalised" + prop);
}
}
哪个曾经被正确地打印:
externalised: hello
not externalised: world
我的TestConfig
类与MyApp
主类位于同一包中。
我所做的与您的解决方案非常相似,几乎相同,您确定路径正确吗?另外,我可以看到属性文件的内容与config类中的内容不匹配,前缀有所不同。也许是问题所在?
编辑:
我试图从属性类中删除@Configuration
批注(您也没有),它不再能够选择外部化的属性。错误虽然有所不同,但您应该尝试添加它。