muy bien

过去,有关应用程序配置的讨论很多。 我不知道谁拉开了辩论的序幕,但是最基础的阅读(着眼于未来的Java EE 7及更高版本)是Antonio Goncalves的帖子[辩论] – Java EE 7中的配置又如何呢 ? 事实是,使用Vanilla Java EE,我们每天都在进行应用程序配置。 没有适当的机制。 看完昨天亚当的最新帖子后,我想对它做些补充,我认为它可以适合大多数项目。

为什么发布这个帖子?

亚当展示的基本知识非常聪明。 你只是

@Inject
int yourConfigVariable;

到此为止。 您不必关心属性或其他配置类。 但是查看它,您发现您需要以某种方式从某个地方填充您的配置。 回顾安东尼奥的帖子,您会发现您有很多选择。 我们最满意的一种可能是Java的Properties机制。 结合使用此代码和Adam提供的代码,您最终将获得Configuration.properties,其中包含无数个单词键列表。 那不是我所说的可维护的。 所以基本上,这就是为什么该帖子的标题是:“将Bien付诸实践” ..oO(对不起,亚当!):-)这是我解决该问题的方法。

从属性文件填充您的配置

最基本的部分是将Configuration.properties文件添加到您的应用程序(默认程序包)。 现在,我们将对配置持有人进行一些修改,使其成为属性类型。 现在,修改Adam的fetchConfiguration()方法以加载它。

private Properties configData;@PostConstructpublic void fetchConfiguration() {String fileName = "Configuration.properties";configData =loadPropertiesFromClasspath(fileName);
}/*** Load properties file from classpath with Java 7 :-)* @param fileName* @return properties*/public static Properties loadPropertiesFromClasspath(String fileName) {try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)) {if (in != null) {props = new Properties();props.load(in);}} catch (IOException ioe) {log.debug("Can't load properties.", ioe);}

现在,您必须相应地修改@Producer方法。 我只在这里显示getString()方法来向您展示概念:

/*** Get a String property* @param point* @return String*/
@Produces
public String getString(InjectionPoint point) {String propertyPath = point.getMember().getDeclaringClass().getName()+ ".";String propertyName = point.getMember().getName();String propertyValue = configData.getProperty(propertyPath+propertyName);return (propertyValue == null) ? "" : propertyValue;}

为了方便起见,我将声明类的名称添加为propertyPath,以使属性文件中的顺序更加明确。 您可以使用Adam所示的生产方法:

package net.eisele.configuration;
public class HitsFlushTimer {@Injectprivate String hitsFlushRate;}

在这种情况下,您最终使用Configuration.properties文件中的键net.eisele.configuration.HitsFlushTimer.hitsFlushRate访问属性。 快速警告。 如果您遇到这种情况,则必须在耳朵内打包单独的ejb和war模块,您可能需要在Configuration单例中使用javax.annotation.security.PermitAll注释。

然后,您最终会重复很多

可能是真的。 如果重新配置相同的配置(例如,httpProxy),这将强制您为属性文件中的不同键使用相同的值。 解决方案似乎很简单。 为此,我们需要自己的资格赛。 我们走吧:

@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Qualifier
public @interface AppProperty {@Nonbindingpublic String value();
}

现在我们有自己的资格赛。 接下来是相应地更改@Producer:

@Produces @AppProperty("")public String getString(InjectionPoint point) {String property = point.getAnnotated().getAnnotation(AppProperty.class).value();String valueForFieldName = configData.getProperty(property);return (valueForFieldName == null) ? "" : valueForFieldName;
}

而已。 现在,您可以在任何地方使用类似的内容:

@Inject@AppProperty("net.eisele.configuration.test2")String test2;

我知道,这还不如亚当的@Inject注解那么优雅。 但是:您不必花很多时间就可以看到正在发生的事情以及您的价值来自何处。 我认为这是一个有多个开发人员的项目中的专业人士。

是的 仍然不是很可维护。

好。 我知道。 您仍在谈论重构属性名称。 对? 还剩下什么呢? 您可以考虑使用封装了所有属性键的CKey枚举,并使用它而不是简单地使用键本身。 但是,我宁愿在代码中简单地使用普通的String键。 现在配置愉快。 您如何配置应用程序? 让我知道! 很高兴收到评论:)

参考:在Java软件企业软件开发博客上, 配置 JEE合作伙伴 Markus Eisele的Java EE应用程序或“将Bien付诸实践” 。

相关文章 :

  • 从Spring到Java EE 6
  • Java EE中的配置管理
  • Java EE过去,现在和云7
  • Java EE6事件:JMS的轻量级替代品
  • Java EE6装饰器:在注入时装饰类

翻译自: https://www.javacodegeeks.com/2011/12/configure-java-ee-applications-or.html

muy bien

muy bien_配置Java EE应用程序或“将Bien付诸实践”相关推荐

  1. 配置Java EE应用程序或“将Bien付诸实践”

    过去,有关应用程序配置的讨论很多. 我不知道谁拉开了辩论的序幕,但是最基础的阅读(着眼于未来的Java EE 7及更高版本)是Antonio Goncalves的帖子[辩论] – Java EE 7中 ...

  2. java ee的小程序_扩展Java EE应用程序的基础

    java ee的小程序 老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被认为与高可用性相同. 我已经看到新手程序员和"经验丰富"的建 ...

  3. 使用tinylog 1.1改进您在Java EE应用程序中的登录

    tinylog是Java的轻量级日志记录框架. 与Apache Log4j和Logback相反,tinylog由仅80KB的单个JAR文件组成,没有任何依赖性,并且具有静态logger类. 这意味着您 ...

  4. openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)

    openshift 部署 在过去的几年中,我越来越多地听说过"云"服务. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已 ...

  5. 扩展Java EE应用程序的基础

    老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被假定与高可用性相同. 我已经看到新手程序员和"经验丰富"的建筑师都建议将" ...

  6. 使用Maven和WebLogic 12c开发Java EE应用程序

    WebLogic Server 12c现在对Maven提供了很好的支持. 不过,此文档有点被隐藏,因此这里是直接链接http://docs.oracle.com/middleware/1212/cor ...

  7. OpenShift Express:部署Java EE应用程序(支持AS7)

    在过去的几年中,我越来越听到有关"云"服务的信息. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已经超过7年了,所以我决 ...

  8. swarm部署集群_WildFly Swarm –将Java EE应用程序部署为独立的Jar

    swarm部署集群 WildFly Swarm提供了一个简单的解决方案,用于将Java EE应用程序部署为独立的Jar文件. 这使得部署应用程序非常容易,尤其是REST或Web服务. Swarm在这方 ...

  9. java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高

    java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...

最新文章

  1. mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法
  2. “ u”到底是做什么的? “ git push -u原始主机”与“ git push原始主机”
  3. linux下无root权限使用yum安装的方法
  4. Javascript 浏览器探测
  5. 使用Java泛型的模板方法模式示例
  6. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
  7. macbook里软件打不开说是没有权限
  8. cad命令栏还原默认_CAD十五个必学的命令 掌握后能走天下了
  9. python 一个简单的天气预报程序
  10. Pulseaudio之libsndfile for android(二十)
  11. 对于拼接进去的html原来绑定的jq事件失效
  12. showModalDialog的title问题,去掉网页对话框
  13. oppo小布机器人_oppo小布小布没反应
  14. 下拉筛选时el-select在部分ios系统上软键盘不能弹出软键盘
  15. 《设计模式》(博客园精华集)
  16. glassfish简单介绍
  17. 学习的 定义是什么?生物
  18. android百度导航demo,Android - 百度导航Demo,我们一起来踩坑!
  19. HB 7066机舱内部非金属材料毒性测定
  20. Joomla version 1.5.12 suffers from path disclosure and local file inclusion vulnerabilities.

热门文章

  1. 《四世同堂》金句摘抄(十五)
  2. python tkinter计算器实例_python -Tkinter 实现一个小计算器功能
  3. 南理工计算机博士 年薪_计算机专业的女博士毕业后,进入211大学当讲师,年薪曝光...
  4. 设计模式 工厂方法_工厂方法设计模式
  5. jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史
  6. aws ec2 跨帐号共享_AWS共享资源的警告
  7. netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序
  8. openshift_Openshift源中的高可用性Drools无状态服务
  9. java 开发 jvm_Java开发人员应了解的JVM流行语
  10. jvm jstat_使用jstat报告自定义JVM指标集