日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring系列(十一):@Profile 注解用法介绍

發布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring系列(十一):@Profile 注解用法介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天給大家分享Spring屬性注入的注解@Profile 介紹,希望對大家能有所幫助!

? ? ? ? ? ? ? ?

一、@Profile 注解的作用

在Spring容器中如果存在同一類型的多個組件,可以使用@Profile注解標識實際要獲取的是哪一個bean,這在不同的環境使用不同的變量的場景下非常有用。

最典型的例子:開發環境、測試環境、生產環境會配置不同的數據源,在盡量不修改代碼的情況下,可以使用這個注解來動態指定要連接的數據源。

二、@Profile 指定環境的方式

2.1 JVM啟動參數

運行的時候給虛擬機參數位置增加 -Dspring.profiles.active=dev

2.2 通過代碼方式控制:

  • 首先創建一個AnnotationConfigApplicationContext

  • 設置環境變量,指定要激活的環境

  • 注冊配置類

  • 啟動的時候刷新容器

三、@Profile 實現切換數據源示例

3.1 導入依賴

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.44</version> </dependency>

3.2 新建數據源配置文件dataSource.properties

dataSource.user=root dataSource.password=123 dataDriveClassName=com.mysql.jdbc.Drive

3.3 新建TestProfileConfig.java 配置類

package com.spring.config;import com.mchange.v2.c3p0.ComboPooledDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.EmbeddedValueResolverAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.context.annotation.PropertySource; import org.springframework.util.StringValueResolver;import javax.sql.DataSource; import java.beans.PropertyVetoException;// 加載配置文件 @PropertySource("classpath:/dataSource.properties") @Configuration public class TestProfileConfig implements EmbeddedValueResolverAware {// 通過@Value注解獲取配置文件dataSource.user的值@Value("${dataSource.user}")private String user;private StringValueResolver resolver;private String dirveClassName;/*** 開發環境**/@Profile("dev")@Beanpublic DataSource dataSourceDev(@Value("${dataSource.password}") String pwd) throws PropertyVetoException {ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setUser(user);dataSource.setPassword(pwd);dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dev_db");dataSource.setDriverClass(dirveClassName);return dataSource;}/*** 測試環境**/@Profile("test")@Beanpublic DataSource dataSourceTest(@Value("${dataSource.password}") String pwd) throws PropertyVetoException{ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setUser(user);dataSource.setPassword(pwd);dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test_db");dataSource.setDriverClass(dirveClassName);return dataSource;}/*** 生產環境**/@Profile("onLine")@Beanpublic DataSource dataSourceOnLine(@Value("${dataSource.password}") String pwd) throws PropertyVetoException{ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setUser(user);dataSource.setPassword(pwd);dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/online_db");dataSource.setDriverClass(dirveClassName);return dataSource;}/*** 通過StringValueResolver解析dataDriveClassName的值**/public void setEmbeddedValueResolver(StringValueResolver resolver) {dirveClassName=resolver.resolveStringValue("${dataSource.dataDriveClassName}");} }

3.4 新建測試類TestProfile.java

package com.spring.test;import com.spring.config.TestProfileConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext;import javax.sql.DataSource;public class TestProfile {public static void main(String[] args) {/* 命令行動態參數:運行的時候給虛擬機參數位置增加 -Dspring.profiles.active=dev通過代碼方式控制:1首先創建一個AnnotationConfigApplicationContext2 設置環境變量,指定要激活的環境3 注冊配置類4啟動的時候刷新容器*/// 01 首先創建一個AnnotationConfigApplicationContextAnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();//02 設置環境變量,指定要激活的環境 可以指定一個或者多個context.getEnvironment().setActiveProfiles("dev","onLine");//03 注冊配置類context.register(TestProfileConfig.class);//04 啟動刷新容器context.refresh();String[] names = context.getBeanNamesForType(DataSource.class);for (String name : names) {System.out.println(name);}} }

輸出結果:

dataSourceDev

dataSourceOnLine

四、使用總結

1、針對標注了環境標識的bean,只有在這個環境被激活的時候,才會注入到容器當中。默認是default環境。

2、如果@Profile 注解的位置在類上,相當于只有在指定該環境的情況下,整個配置類里面的配置才有機會生效。

3、針對沒有標注環境表示的bean,在任何環境下都可以被正常加載。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的Spring系列(十一):@Profile 注解用法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。