導航:首頁 > 版本升級 > spring動態修改配置文件

spring動態修改配置文件

發布時間:2023-08-29 06:32:53

① 怎麼動態改變spring的配置文件applicationContext.xml

既團森櫻然是ssh,那就需要在web.xml中配置一下
用listener
<context-param>塌叢
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/:applicationContext.xml,</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</春隱listener>

② spring如何動態載入配置文件,就是配置文件修改了,application.xml如何能讀取到

項目,需要訪問多個資料庫,而且需要在伺服器運行不重新啟動的情況下,動態的修改spring中配置的數據源datasource,在網上找了很多資料,最後找到了適合我的方法,下面總結一下。
spring的配置文件是在容器啟動的時候就載入到內存中的,如果手動改了application.xml,我們必須要重新啟動伺服器配置文件才會生效。而在spring中提供了一個類WebApplicationContext,這個類可以讓你獲得一些bean,可以修改內存中的信息,我就是通過這個類來實現的。下面是我具體的代碼

package com.southdigital.hospital;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ChangeSpringConfig extends HttpServlet
{

private String ipAddress = "127.0.0.1";

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response);
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//先取得servleContext對象,提供給spring的WebApplicationUtils來動態修改applicationContext.xml

ipAddress = request.getParameter("ipAddress");
System.out.println(ipAddress);

ServletContext servletContext = this.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource");
cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh");

}

}
注意:通過這種方法修改applicationContext.xml文件的時候用c3p0,而不可以用dbcp,dbcp不支持動態修改讀取到內存裡面的數據。
spring 3.1已經支持了。

③ 單體Spring boot引入外部配置文件yml,properties

我們在做微服務項目時候會引入spring cloud框架,對於配置文件我們就會通過spring cloud config來配置,實現線上環境動態修改配置文件屬性而不需要重新打jar 包。 但是對於單體的spring boot工程,我們又希望可以在生產環境中方案修改配置文件屬性。

通過引入外部配置文件,應用啟動時候設置配置文件的自動載入
1: 在單體工程的root目錄下添加一個config目錄,然後新建我們的properties, 如:jdbc-db.properties, redis.properties

2: 然後在我們的application啟動類上添加@propertySources註解引入我們的外部文件

注意:因為PropertySources 默認只解析.properties文件,如果要解析yml文件,需要指定factory只需要實現org.springframework.core下的 PropertySourceFactory 介面就OK了。

簡單的properties配置文件只需要按如下方式配置即可

只需要1,2步驟就可以完成外部文件的載入,如果涉及到線上修改配置就只需要手動修改配置文件,重新啟動應用即可生效。

④ Springboot 使用@RefreshScope 註解,實現配置文件的動態載入

實現配置文件動態讀取的好處不必多說,修改配置文件後不必重啟Application ,想想就開心。

合格調包俠的必備技能,從Maven倉庫引入依賴的Jar包,

搞好配置文件,默認在application.yml /properties 就行,與本功能相關的配置項(採用yml格式)如下:

distributed-id是自定義需要動態部署的配置文件。management:是暴露refresh介面,不加此條配置將無法啟用動態載入配置文件的功能(也就是管你理解不理解,別問,加就對了)。

1.編寫自定義配置文件的Java對象,一定要在類上加@RefreshScope註解

@data是lombok的註解,別的註解不多說。

2.編寫你的conroller ,也一定要加@RefreshScope註解, 不加的話,呵呵,對不起,無法運行。。原因嗎---在這 @RefreshScope not working - Spring Boot - Stack Overflow

   我這里是返回配置文件中distributed-id.mechineId的值。

3.到此為止了,簡單吧😒。其實的話,第一步也可以直接在Bean的配置中心(也就是@Configuration註解的類)搞一下,效果是一樣的。

使用這種寫法,就可以不用在配置對象類上加@Component和@RefreshScope。

測試一下啦,啟動應用前,將配置文件設置如下:

運行程序後,在瀏覽器輸入你的測試地址,返回如下,是5沒錯了:

然後找到你編譯後文件,修改配置文件的值,注意是 編譯後的配置文件     就是下圖中灰色文件的位置

修改如下:mechineId修改為4

接下來向 http://localhost:port/actuator/refresh 發送 POST 請求,get請求是無法識別的呦😘,可以看到返回了配置文件中被更改的屬性

測試一下,沒錯了,返回值為4

⑤ springboot實現動態載入遠程配置文件

有個獨立的API項目,該項目主要是對外部各個系統提供API介面,為了保證調用的安全,需要對請求進行校驗,主要校驗包括調用頻率,訪問IP,是否跨域和Token,其中IP和是否跨域的配置會根據接入方進行相應的修改,為了避免每次有新的接入方就得去修改一次配置文件並重啟項目,所以打算使用動態配置的方式。

初級實現方案:API服務每隔5分鍾向管理端請求一次數據,管理端添加IP和域白名單的管理,這個實現方案,簡單好用,但是弊端也明顯,管理端每次修改完配置後,客戶端需要等待下次請求後才會載入對應的配置,同時,還需要自己管理獲取到的配置文件

更新方案:在springboot啟動時,先從遠端獲取配置文件,並將其載入進Environment對象中,其餘的,就都交給Spring了。同時配合spring-cloud-context實現遠程配置變更後,本地重新拉取配置並更新

點進去之後,springboot會在這里初始化ConfigurableEnvironment對象

這里是給ConfigurableEnvironment做一些初始化工作,我們先不管了,重點在這里,listeners.environmentPrepared(environment);,Springboot通過事件,將Environment的載入分發出去

到此為止,我們就能像使用本地配置文件一樣使用伺服器上的配置文件了,但是這里還只實現了載入遠程配置文件,我們還需要在遠程配置文件變更時,實現配置文件的熱更新

⑥ Spring的動態代理配置文件怎麼配置

首先配置動態代理的那個類 然後在需要用代理的類 引用配置動態代理的那個對象 就是ref=「配置動態代理的那個對象」

⑦ 怎麼在不重啟服務的情況下修改spring配置文件

我們有個項目要根據不同的注冊用戶,動態為這個用戶生成資料庫。所以就必須在系統中生成新的數據源,吵運這一切都要在不重啟服務的情況下完成。我現在是根據注冊的不同用戶,在spring的配置文件內添加數據源配置,可對spring的配置文件修改後不能得到相應源碰唯的內容。請問怎樣才能重新獲得修改過的配置文件?或者用別的方案來實現?
問題補充:謝謝你的幫助,按照你的雹培方案,問題已經解決。我根據不同的用戶產生相應的配置文件,然後對相應的用戶產生一個ApplicationContext放進Application池進行管理。這樣就是每個用戶都有一個獨立的ApplicationContext。

閱讀全文

與spring動態修改配置文件相關的資料

熱點內容
加入java信任站點 瀏覽:486
好用的急救知識app 瀏覽:524
什麼是網路適配器驅動文件名 瀏覽:717
吉林文件箱多少錢 瀏覽:113
ae模板版本 瀏覽:204
手機qq步數功能在哪裡 瀏覽:721
c程序設計04737 瀏覽:403
女孩什麼年齡學編程 瀏覽:976
安慶如何做網路營銷推廣 瀏覽:620
什麼是數據標准化 瀏覽:708
aecc三維功能實例視頻教程 瀏覽:719
iphone6s靜音鍵用法 瀏覽:560
油卡盒子APP是什麼公司名下的 瀏覽:597
怪物獵人wp文件夾什麼意思 瀏覽:108
設置密碼的pdf文件如何轉換成word 瀏覽:876
多個文件合並到一起後叫什麼 瀏覽:387
資料庫位是什麼意思 瀏覽:104
如何改變手機上的網路連接 瀏覽:908
某網站圖片侵權如何舉報 瀏覽:820
zemax宏編程有什麼用 瀏覽:874

友情鏈接