属性文件的最佳使用方式
Properties files best way of using them
我正在努力处理 属性 个文件。在我的应用程序中,我使用了两种 属性 文件的方式:在 spring 中和直接在我的应用程序中。
在应用程序中,我使用一种方法获取 属性:
private String getHome() {
String name = null;
try {
Properties prop = new Properties();
String propFname = "path.properties";
InputStream is = getClass().getClassLoader().getResourceAsStream(propFname);
if (is == null) {
throw new FileNotFoundException("path.properties File Not found");
}
prop.load(is);
name = prop.getProperty("HOME");
} catch (FileNotFoundException e) {
log.error(e);
System.exit(1);
} catch (IOException e) {
log.error(e);
System.exit(1);
}
return name;
}
然后在我的 class 中我使用:
private static String home = new MailService().getHome();
但是对于 JDBC 连接等,我使用 Spring xml 文件和 context:property-占位符。
我只想让这两种方式成为一种 - 属性 文件的位置也不同,从上面我把它们放在 /WEB-INF/classes/ 而从 Spring 只在/WEB-INF/ 这可能令人困惑。
关于我的问题:
- 统一这两种方式有意义吗,我的意思是它们都是
具有它们的含义还是对两者都使用 spring 更好
他们我已经在用了?
- 在Spring中我也找到了两种初始化属性的方法,一种
使用@Value 注释,其次使用@Autowiring bean。如果我是
正确的,他们应该都做同样的功能,只是更新
和旧款还是这两者之间有真正的区别?
- 最后一个问题:我搜索的是将 属性 文件保存到的不同方法。最常见的是 /resources、/WEB-INF 和 /classes/config/。它也随着时间的推移而区分,或者只是程序员更喜欢什么?我没有找到直接的答案。
抱歉,如果这个问题看起来很空,但通过搜索不同的答案,我对正确的方法感到困惑。
谢谢。
1) 再次阅读您的问题,认为我现在更好地理解了您的问题。 Web/Database/Security/.. 你应该有单独的配置文件,但你可以保留一个应用程序 属性 文件。
我认为您混淆了可能包含您的策略、并发模型、线程数等的应用程序 属性 文件与用于设置 ORM、Servlet 映射等的配置文件
2) @Autowired用于Bean的依赖注入,不能用于解析属性文件中的值。它是@Value 的特化。
3) 我首选的保存应用程序 属性 文件的方法是允许通过环境变量/ tomcat 参数配置位置。
您可以执行以下操作:
@Configuration
@PropertySource(value = "file:${OTT_PROPS}")
@Profile("production")
public class ProductionConfiguration {
// this must be static else spring does some odd stuff
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后提供 属性 文件的位置作为 tomcat 参数:
• -DOTT_PROPS = "path_to_properties_file"
并使用@Value 从 属性 文件中注入值。
- 是的,请统一这一点 - 没有理由编写您自己的代码来访问属性文件,因为 Spring 通过将值直接注入到需要它们的 类 来提供此功能使用
@Value
或使用表达式,例如${home}
在您的应用程序上下文中 XML。
- 使用
@Value
从 属性 个文件中注入值。 @Autowired
用于注入 bean 而不是默认值 - 它不是环境感知的,您不能将表达式传递给它。
- 将您的 属性 个文件放入
src/main/resources
。这是 Maven 标准 - Maven 会将它们部署到 WEB-INF/classes,因此它们在您的类路径上可用,并且您的 Spring 应用程序可以轻松访问它们。
我正在努力处理 属性 个文件。在我的应用程序中,我使用了两种 属性 文件的方式:在 spring 中和直接在我的应用程序中。
在应用程序中,我使用一种方法获取 属性:
private String getHome() {
String name = null;
try {
Properties prop = new Properties();
String propFname = "path.properties";
InputStream is = getClass().getClassLoader().getResourceAsStream(propFname);
if (is == null) {
throw new FileNotFoundException("path.properties File Not found");
}
prop.load(is);
name = prop.getProperty("HOME");
} catch (FileNotFoundException e) {
log.error(e);
System.exit(1);
} catch (IOException e) {
log.error(e);
System.exit(1);
}
return name;
}
然后在我的 class 中我使用:
private static String home = new MailService().getHome();
但是对于 JDBC 连接等,我使用 Spring xml 文件和 context:property-占位符。
我只想让这两种方式成为一种 - 属性 文件的位置也不同,从上面我把它们放在 /WEB-INF/classes/ 而从 Spring 只在/WEB-INF/ 这可能令人困惑。
关于我的问题:
- 统一这两种方式有意义吗,我的意思是它们都是 具有它们的含义还是对两者都使用 spring 更好 他们我已经在用了?
- 在Spring中我也找到了两种初始化属性的方法,一种 使用@Value 注释,其次使用@Autowiring bean。如果我是 正确的,他们应该都做同样的功能,只是更新 和旧款还是这两者之间有真正的区别?
- 最后一个问题:我搜索的是将 属性 文件保存到的不同方法。最常见的是 /resources、/WEB-INF 和 /classes/config/。它也随着时间的推移而区分,或者只是程序员更喜欢什么?我没有找到直接的答案。
抱歉,如果这个问题看起来很空,但通过搜索不同的答案,我对正确的方法感到困惑。
谢谢。
1) 再次阅读您的问题,认为我现在更好地理解了您的问题。 Web/Database/Security/.. 你应该有单独的配置文件,但你可以保留一个应用程序 属性 文件。
我认为您混淆了可能包含您的策略、并发模型、线程数等的应用程序 属性 文件与用于设置 ORM、Servlet 映射等的配置文件
2) @Autowired用于Bean的依赖注入,不能用于解析属性文件中的值。它是@Value 的特化。
3) 我首选的保存应用程序 属性 文件的方法是允许通过环境变量/ tomcat 参数配置位置。
您可以执行以下操作:
@Configuration
@PropertySource(value = "file:${OTT_PROPS}")
@Profile("production")
public class ProductionConfiguration {
// this must be static else spring does some odd stuff
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后提供 属性 文件的位置作为 tomcat 参数:
• -DOTT_PROPS = "path_to_properties_file"
并使用@Value 从 属性 文件中注入值。
- 是的,请统一这一点 - 没有理由编写您自己的代码来访问属性文件,因为 Spring 通过将值直接注入到需要它们的 类 来提供此功能使用
@Value
或使用表达式,例如${home}
在您的应用程序上下文中 XML。 - 使用
@Value
从 属性 个文件中注入值。@Autowired
用于注入 bean 而不是默认值 - 它不是环境感知的,您不能将表达式传递给它。 - 将您的 属性 个文件放入
src/main/resources
。这是 Maven 标准 - Maven 会将它们部署到 WEB-INF/classes,因此它们在您的类路径上可用,并且您的 Spring 应用程序可以轻松访问它们。