java properties 中 location 怎么获得_Java Spring 中properties配置信息独立于jar包或者war包的方法...

当部署Java Web项目的时候我们可以把全部目录打包成一个单独jar或者war包,然后把这个.jar或者.war文件放在tomcat的webapps目录下。

当我们重新启动tomcat就可以访问这个项目了,这样一个war包的形式给传输、存储和部署给我们带来的好处,但是也带来一个问题就是把项目一些配置文件.xml,.properties等也打包进去了,如果想改这些配置文件里面的某些属性值需要重新打包。我个时候我想有没有一种方式可以配置信息独立出来,这样更改配置不用重要打war包,这会大大提高的项目的可维护性。

下面介绍一下在Spring中配置信息独立于jar包或者war包的方法。

Spring读取properties实例可以参数我之前写的文章:Spring MVC利用读取properties实现程序配置参数

一、Spring的util配置注入方式

下面我还是利用

Controller代码:

package com.lanhusoft.web.controllers;

import com.lanhusoft.config.SysConfig;

import com.lanhusoft.model.Message;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

/**

* Created by Administrator on 2016/11/10.

*/

@Controller

public class DemoController {

@Autowired

private SysConfig sysConfig;

@RequestMapping("demo")

@ResponseBody

public Message say() {

Message message = new Message();

message.setName("lanhusoft");

message.setText("hello," + sysConfig.getResHostPrefix());

return message;

}

}

1、更改spring的xml配置文件

原来的:

改为:

找到tomcat安装目录的bin下面的catalina.bat文件找到

"JAVA_OPTS=

加入增加:

-DAPP_HOME=F:\App\conf\LanhuRest\

也就是放配置文件的目录。

最效果如下图:

fc7a4f03c37ddb75f2c104a323054628.png

注意:

这里是windows操作系统,所以改的是catalina.bat文件,如果是linux就改catalina.sh,然后把路径做对应调整。

2、生成war包并把它拷贝到tomcat的webapps目录下

19fdd794547dda7b06731afcf9f1efcc.png

3、为了不让tomcat启动时自动解开.war包,修改server.xml的unpackWARs为false。

1299815ed5dc78eb77ab24e77c8194c7.png

4、建立独立.war的properties文件

57b8f21115b3c779577e54fe73c44b19.png

内容为:

resHostPrefix=http://lanhusoft.com/

5、启动tomcat,运行startup.bat,查看效果。

89fff68f3ac7af30d21c2ed130cf88e0.png

6、修改目录F:\App\conf\LanhuRest下的sysConfig.properties把改为:

resHostPrefix=http://www.lanhusoft.com/

重启tomcat再次查http://localhost:8081/LanhuRest_war/demo.json

2fd20e6293da1728f07af6f0a03a7d8d.png

可以从上面看到修改生效了。

二、占位--使用PropertyPlaceholderConfigurer

使用PropertyPlaceholderConfigurer类载入外部配置

在Spring项目中,你可能需要从properties文件中读入配置注入到bean中,例如数据库连接信息,memcached server的地址端口信息等,这些配置信息最好独立于jar包或者war包,这样便于修改配置。Spring提供了PropertyPlaceholderConfigurer类来处理这件事情。

例如,要载入配置文件中的mysql配置信息:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/mypage

jdbc.username=root

jdbc.password=123456

我们需要在spring配置文件中定义PropertyPlaceholderConfigurer的location属性,这个location指向配置文件的位置:

在上面的例子中PropertyPlaceholderConfigurer类的systemPropertiesModeName的属性是SYSTEM_PROPERTIES_MODE_OVERRIDE这意味着可以从jvm虚拟机的参数中获得配置信息。

配置location的值中的${APP_HOME}可以根据环境不同设置不同的值,例如在开发环境,设置开发环境的目录,而在线上环境就要配置线上配置文件的路径了。

对于jar包文件,需要在启动jar包时指定APP_HOME的值,例如:

java -classpath test.jar -DAPP_HOME=/data0/conf cn.outofmemory.App

而对于运行在tomcat容器中的war包,需要修改下tomcat目录下的bin/catalina.sh文件,在此文件中添加或者修改如下变量的值:

JAVA_OPTS="-Xms2560m -Xmx5120m -DAPP_HOME=/application/outofmemory.cn/conf/"

注意-Xms2560m -Xmx5120m是为了修改虚拟机的内存值,-DAPP_HOME才影响配置文件位置。

给PropertyPlaceholderConfigurer指定必要的属性之后就可以通过${variable}的形式将配置文件中的值植入到bean中了。

如果你希望将配置文件放在jar包或者war包内,那么需要将location中的file:去掉,例如在war包中通常会放在/WEB-INF/conf路径下,那么可以这么写:

PS:为什么我们把war放在tomcat的webapps目录下就能访问的呢?

当启动tomcat的时候就会根据配置怎么解压或者不解压这个.war包,不过不解压也要以访问。打开conf下面的server.xml可以看到如下配置。

unpackWARs="true" autoDeploy="true">

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

可以看到,appBase的值为webapps,且uppackWAR属性是true,也就是要解压war包。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值