电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Spring中的@PropertySource注解使用

瀏覽:3日期:2023-12-13 15:32:02

@PropertySource注解是Spring用于加載配置文件,默認(rèn)支持.properties與.xml兩種配置文件。@PropertySource屬性如下:

name:默認(rèn)為空,不指定Spring自動生成 value:配置文件 ignoreResourceNotFound:沒有找到配置文件是否忽略,默認(rèn)false,4.0版本加入 encoding:配置文件編碼格式,默認(rèn)UTF-8 4.3版本才加入 factory:配置文件解析工廠,默認(rèn):PropertySourceFactory.class 4.3版本才加入,如果是之前的版本就需要手動注入配置文件解析Bean

接下來就使用@PropertySource來加載.properties與.xml配置文件。這里模擬連接MySQL數(shù)據(jù)庫。首先添加依賴:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.6.RELEASE</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version></dependency>

準(zhǔn)備屬性配置文件jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306jdbc.userName=rootjdbc.password=xiaohu

創(chuàng)建屬性實(shí)體類來加載配置文件JdbcProperties

@Data@Repository@PropertySource(value = 'classpath:jdbc.properties')public class JdbcProperties { @Value('${jdbc.driver}') private String driver; @Value('${jdbc.url}') private String url; @Value('${jdbc.userName}') private String userName; @Value('${jdbc.password}') private String password;}

創(chuàng)建JDBC配置類JdbcConfig

@Componentpublic class JdbcConfig { @Bean public DataSource dataSource(JdbcProperties jdbcProperties){System.out.println('打印獲取到的配置信息:'+jdbcProperties);DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName(jdbcProperties.getDriver());dataSource.setUrl(jdbcProperties.getUrl());dataSource.setUsername(jdbcProperties.getUserName());dataSource.setPassword(jdbcProperties.getPassword());return dataSource; }}

創(chuàng)建Spring配置類SpringConfiguration

@Configurationpublic class SpringConfiguration {}

創(chuàng)建測試類測試讀取配置文件

public class PropertySourceTest { public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext('config');DataSource dataSource = context.getBean('dataSource',DataSource.class);System.out.println(dataSource); }}

查看輸出結(jié)果:

打印獲取到的配置信息:JdbcProperties(driver=com.mysql.cj.jdbc.Driver, url=jdbc:mysql://127.0.0.1:3306, userName=root, password=xiaohu)org.springframework.jdbc.datasource.DriverManagerDataSource@58695725

從結(jié)果可以看出,我們的properties中的配置已經(jīng)成功讀取到,并且DataSource也從Spring容器中獲取到。上面介紹注解的屬性時,factory是4.3版本才加入的,那么如果4.3版本之前要解析配置文件又應(yīng)該怎么處理呢?,這個時候就需要手動將解析配置文件的Bean注入到Spring容器中了,用法很簡單,在SpringConfiguration類中添加如下代碼即可:

@Beanpublic PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer();}

具體測試結(jié)果,就自行測試了。上面例子介紹了properties的使用,下面我們將配置文件換成xml文件。配置如下:

<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'><properties> <entry key='jdbc.driver'>com.mysql.cj.jdbc.Driver</entry> <entry key='jdbc.url'>jdbc:mysql://127.0.0.1:3306/test</entry> <entry key='jdbc.userName'>root</entry> <entry key='jdbc.password'>xiaohu</entry></properties>

然后將JdbcProperties類上的注解的配置文件換成xml文件。

@PropertySource(value = 'classpath:jdbc.properties')

其他不用調(diào)整,執(zhí)行測試類,輸出的結(jié)果一樣。因?yàn)樯厦娼榻B到@PropertySource默認(rèn)支持properties與xml的配置文件。我們可以查看PropertySourceFactory的默認(rèn)實(shí)現(xiàn)DefaultPropertySourceFactory源碼

public class DefaultPropertySourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {return (name != null ? new ResourcePropertySource(name, resource) : new ResourcePropertySource(resource));}}

然后進(jìn)入ResourcePropertySource類,源碼這里使用了一個三元運(yùn)算符,如果name為空,就使用默認(rèn)Spring默認(rèn)生成的name。

public ResourcePropertySource(String name, EncodedResource resource) throws IOException {super(name, PropertiesLoaderUtils.loadProperties(resource));this.resourceName = getNameForResource(resource.getResource());}public ResourcePropertySource(EncodedResource resource) throws IOException {super(getNameForResource(resource.getResource()), PropertiesLoaderUtils.loadProperties(resource));this.resourceName = null;}

這里可以看到調(diào)用了PropertiesLoaderUtils.loadProperties方法,進(jìn)入到源碼

public static Properties loadProperties(EncodedResource resource) throws IOException {Properties props = new Properties();fillProperties(props, resource);return props;}

會調(diào)用fillProperties的方法,一直跟到調(diào)用最低的fillProperties方法。

static void fillProperties(Properties props, EncodedResource resource, PropertiesPersister persister)throws IOException {InputStream stream = null;Reader reader = null;try {String filename = resource.getResource().getFilename();if (filename != null && filename.endsWith(XML_FILE_EXTENSION)) {stream = resource.getInputStream();persister.loadFromXml(props, stream);}else if (resource.requiresReader()) {reader = resource.getReader();persister.load(props, reader);}else {stream = resource.getInputStream();persister.load(props, stream);}}finally {if (stream != null) {stream.close();}if (reader != null) {reader.close();}}}

第一個if判斷文件后綴是否是xml結(jié)尾,常量XML_FILE_EXTENSION如下:

private static final String XML_FILE_EXTENSION = '.xml';

除了支持properties與xml的配置文件方式,也支持yml配置文件的方式,不過需要自定義解析工廠,下面來實(shí)現(xiàn)怎么解析yml配置文件。引入可以解析yml文件的第三方庫

<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.28</version></dependency>

創(chuàng)建yml解析工廠YamlPropertySourceFactory實(shí)現(xiàn)PropertySourceFactory

public class YamlPropertySourceFactory implements PropertySourceFactory { @Override public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {YamlPropertiesFactoryBean factoryBean = new YamlPropertiesFactoryBean();factoryBean.setResources(resource.getResource());Properties properties = factoryBean.getObject();return name != null ? new PropertiesPropertySource(name, properties) : new PropertiesPropertySource(resource.getResource().getFilename(), properties); }}

然后將JdbcProperties類的@PropertySource換成如下寫法:

@PropertySource(value = 'classpath:jdbc.yml',factory = YamlPropertySourceFactory.class)

執(zhí)行測試類,輸出結(jié)果與上面結(jié)果一樣

打印獲取到的配置信息:JdbcProperties(driver=com.mysql.cj.jdbc.Driver, url=jdbc:mysql://127.0.0.1:3306, userName=root, password=xiaohu)org.springframework.jdbc.datasource.DriverManagerDataSource@58695725

證明我們自定義的解析yml配置文件就成功了。

到此這篇關(guān)于Spring的@PropertySource注解使用的文章就介紹到這了,更多相關(guān)Spring的@PropertySource注解使用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | CCC验厂-家用电器|服务器CCC认证咨询-奥测世纪 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 潍坊大集网-潍坊信息港-潍坊信息网 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 20年条刷老厂-条刷-抛光-工业毛刷辊-惠众毛刷 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 联系我们老街华纳娱乐公司官网19989979996(客服) | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 |