我使用Spring Initializr生成了一个Spring Bootweb应用程序,使用macOS Sierra中的嵌入式Tomcat+Thymeleaf模板引擎。我想在Mac OS中使用系统变量User Home Folder Name
@Configuration
@Profile("dev")
@PropertySource("file:///{user.home}/.devopsbuddy/application-dev.properties")
public class DevelopmentConfig {
@Bean
public EmailService emailService() {
return new MockEmailService();
}
}
但我在启动应用程序时出现了这个错误
Caused by: java.io.FileNotFoundException: /{user.home}/.devopsbuddy/application-dev.properties (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:169)
at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:154)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:98)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:72)
at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:58)
at org.springframework.core.io.support.ResourcePropertySource.<init>(ResourcePropertySource.java:65)
at org.springframework.core.io.support.DefaultPropertySourceFactory.createPropertySource(DefaultPropertySourceFactory.java:36)
at org.springframework.context.annotation.ConfigurationClassParser.processPropertySource(ConfigurationClassParser.java:440)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:271)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:190)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:292)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
... 13 common frames omitted
@PropertySource最初是作为Spring 3.1的一部分添加的,用于导入资源
在@PropertySource Java文档中指出,
@PropertySource资源位置中存在的任何${…}占位符都将根据已针对环境注册的属性源集进行解析。
@Configuration
@PropertySource(value = "classpath:application.properties")
public class ApplicationConfig {
// more configuration ...
}
@Configuration
@PropertySource("application.properties")
public class ApplicationConfig {
}
@PropertySource("file:/path/to/application.properties")
或者您可以使用
@PropertySource("file:${CONF_DIR}/application.properties")
$ echo $CONF_DIR
/path/to/directory/with/app/config/files
在您的情况下,您必须使用`
@PropertySource(“文件:${user.home}/application.properties”)
$ echo $user.home
/home/yourusername
第一个新功能:
它处理丢失的文件。默认情况下,如果Spring没有找到已经声明的文件,它将抛出一个异常。
@PropertySource(value = "missing.properties", ignoreResourceNotFound = true)
如果不使用IgnoreResourceNotFound=true
,它将给出以下错误。
java.lang.IllegalStateException: Failed to load ApplicationContext
[...]
Caused by: java.io.FileNotFoundException: class path resource [missing.properties] cannot be opened because it does not exist.
@PropertySources({
@PropertySource("default.properties"),
@PropertySource("overriding.properties")
})
把它放在一起
总而言之,属性源配置可以实现如下:
@Configuration
@PropertySources({
@PropertySource("default.properties"),
@PropertySource(value = "file:${CONF_DIR}/optional-override.properties", ignoreResourceNotFound = true)
}
public class ApplicationConfig {
}
在Java 8中
@Manufactures({
@Manufacturer(name =”BMW”),
@Manufacturer(name = “Range Rover”)
})
public class Car{
//code goes in here
}
@Manufacturer(name = “BMW”)
@Manufacturer(name= “Range Rover”)
public class Car{
//code goes in here
}
所有的功劳都归于马蒂亚斯·塞弗森
0.00 (1991.2-4?) 两个进程分别显示AAA BBB 0.01 (1991.9?)第一个正式向外公布的Linux 内核版本。 0.02 (1991.10.5)该版本以及0.03 版是内部版本,目前已经无法找到。 0.03 (1991.10.5) 0.10 (1991.10)由Ted Ts'o 发布的Linux 内核版本。 0.11 (1991.12.8)基本可以正常运行的内核版本。 0
获取系统版本信息 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id completion 是 结果回调 接口定义 Swift: RokidMobileSDK.device.getVersion(deviceId: String, completion: @escaping (_ error: Error?, _ versionInfo: RKDeviceVersio
获取系统版本信息 接口说明 获取当前设备的系统版本信息 返回的消息将以Event的形式向上抛。 返回值 只表示 获取系统版本信息是否已经发送成功。 参数说明 字段 类型 必须? 说明 deviceId String 是 设备ID 示例代码: Kotlin RokidMobileSDK.device.getVersionInfo(deviceId, object : IChannelPublishC
Interpreter # platform_python.py import platform print('Version :', platform.python_version()) print('Version tuple:', platform.python_version_tuple()) print('Compiler :', platform.python_co
问题内容: 我怎样才能做到这一点? 它将替换为文本。但是我想用变量的内容替换它。 我尝试过 它也不起作用。 问题答案: 您需要使用双引号: 您的单引号可防止将shell变量替换为其内容。
只能搜到一些早期的,官方文档似乎都没对应关系的表格之类的