如何在Liberty 22.0.0.13服务器配置多应用共享属性与库
WebSphere Liberty 多应用共享公共资源最佳实践
一、共享库的全局配置(解决服务器级配置不生效问题)
你之前单独在server.xml里配置<classLoader commonLibraryRef="mySharedLib" />不生效,是因为这个服务器级的类加载器不会自动绑定到所有应用,可通过以下两种方式解决:
方式1:通过applicationManager指定全局默认类加载器
先定义共享库,再创建服务器级类加载器,最后让所有应用默认使用这个类加载器:
<library id="mySharedLib"> <folder dir="/path/to/folder" /> <fileset dir="/path/to/fileset/directory" includes="*.jar" /> </library> <!-- 定义全局类加载器,关联共享库 --> <classLoader id="globalAppClassLoader" commonLibraryRef="mySharedLib" /> <!-- 配置所有应用默认使用这个类加载器 --> <applicationManager defaultClassLoaderRef="globalAppClassLoader" />
这种配置是服务器级的,Eclipse部署应用时不会被覆盖,所有应用都会自动加载mySharedLib中的库。
方式2:给共享库设置target属性直接关联所有应用
更简洁的方式是给<library>标签添加target属性,指定目标应用范围:
<library id="mySharedLib" target="all"> <folder dir="/path/to/folder" /> <fileset dir="/path/to/fileset/directory" includes="*.jar" /> </library>
target="all":所有类型的应用(EAR、WAR等)都会自动加载这个共享库- 也可以指定特定类型,比如
target="webapp"仅Web应用生效,target="enterpriseApplication"仅EAR应用生效
二、公共属性的全局配置
方式1:用bootstrap.properties定义系统级属性
在Liberty服务器的配置目录(通常是wlp/usr/servers/[你的服务器名])下编辑bootstrap.properties,添加公共属性:
db.url=jdbc:mysql://localhost:3306/mydb db.username=admin db.password=yourpassword
所有应用可以直接通过System.getProperty("db.url")获取这些属性。
方式2:在server.xml中定义全局变量
在server.xml里用<variable>标签定义全局变量,这些变量可在服务器配置和应用中引用:
<variable name="db.url" value="jdbc:mysql://localhost:3306/mydb" /> <variable name="db.username" value="admin" />
应用中可以通过JNDI获取,比如在web.xml中配置:
<env-entry> <env-entry-name>dbUrl</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>${db.url}</env-entry-value> </env-entry>
然后在代码中通过InitialContext.lookup("java:comp/env/dbUrl")读取。
方式3:共享外部属性文件
如果属性较多,可将公共属性放在单独的文件(比如shared.properties)中,放在服务器配置目录下,然后在server.xml中引用:
<properties id="sharedProperties" location="${server.config.dir}/shared.properties" />
之后可以在服务器配置或应用中通过${sharedProperties.db.url}的形式引用属性值。
内容的提问来源于stack exchange,提问作者justanotherdev
相关产品推荐
相关产品推荐

