Change Springcloud configserver persistent storage to MySQL

Source: Internet
Author: User
Tags findone using git

Original Published: Http://www.gufeng.tech/

1. Background

The default for Springcloud Configserver is to persist using Git. Git has its natural advantages, such as multi-versioning, branch management, submitting audit policies, and so on, but it is not enough to do fine-grained permissions control over the data stored there. Of course, you can change the way you use it to suit that, but what we're going to do today is move the persistence from git to MySQL.

2. Querying configuration information

Configserver has an interface: Org.springframework.cloud.config.server.environment.EnvironmentRepository, the implementation class of this interface is configserver to query the configuration letter The method signature is as follows:

Environment FindOne (string application, string profile, string label);

We can implement this interface and query MySQL in the implementation of the method, so we have half the success, and the other half is to figure out how to save the data to MySQL. We still solve the query problem first, we implement the method content as follows:

public class databasesenvironmentrepository implements environmentrepository {      @Autowired  private configservice configservice;    @ Override    public environment findone (string application, string  profile, string label)  {        if  ( Stringutils.isempty (application)  | |  stringutils.isempty (profile))              return null;        configitem configitem =  Configservice.findconfig (Application, profile, label);         if  (configitem != null)  {             environment environment = new environment (application,  Stringutils.commadeLimitedlisttostringarray (Profile),                     label, configitem.getversion ());             Map map = new HashMap<> ();             for  (Configproperty configproperty  : configitem.getconfigproperties ())  {                 map.put (Configproperty.getkey (),  configproperty.getvalue ());             }             environment.add (New propertysource (application +  "_"  +  profile +  "_"  + label, map));             return environment;        }         return new environment (Application, stringutils.commadelimitedlisttostringarray ( profile);     }}

      Next we'll look at the contents of the Configservice class:

@Servicepublic class Configservice {@Autowired private Configdao Configdao; Public Configitem Findconfig (string application, string profile, String label) {Configitem Configitem = Configdao.        Findconfig (Application, profile, label);        if (null = = Configitem) {return null;        } List configproperties = Configdao.findconfigproperties (Configitem.getid ());        Configitem.setconfigproperties (configproperties);    return configitem; }}

Finally, let's look at the implementation of Configdao:

@Mapperpublic interface Configdao {@Select ("select * from Config_item where application = #{application} and profile = #{profile} and label = #{label} ") List findconfigproperties (@Param (" Application ") String application, @Param (" Profile " String profile, @Param ("label") string label);}

Here we are using the MyBatis annotation method, please refer to the relevant documentation for the details of the MyBatis annotation use.

3. Database-related functions

Let's look at the configuration of the data source first:

@Configurationpublic  class DataSourceConfiguration {     @Value ("${ Jdbc.driver} ")     private String driver;     @Value (" ${ Jdbc.url} ")     private String url;     @Value (" ${ Jdbc.username} ")     private String username;     @Value (" ${ Jdbc.password} ")     private String password;     @Value (" ${ Jdbc.maxactive} ")     private int maxActive;     @Value (" ${ Jdbc.maxidel} ")     private int maxIdel;     @Value (" ${ Jdbc.maxwait} ")     private long maxWait;     @Bean      public basicdatasource datasource () {         basicdatasource datasource = new bAsicdatasource ();         datasource.setdriverclassname (driver);         datasource.seturl (URL);         datasource.setusername (username);         datasource.setpassword ( password);         datasource.setmaxtotal (maxactive);         datasource.setmaxidle (Maxidel);         Datasource.setmaxwaitmillis (maxwait);         Datasource.setvalidationquery ("select 1");         Datasource.settestonborrow (True);        return datasource;     }}

Next look at the configuration information for the MyBatis (and of course, you can use SPRINGJDBC):

@Configuration @enabletransactionmanagement//Support Transactions
public class mybatisconfig implements transactionmanagementconfigurer {      @Autowired  private DataSource dataSource;     @Override      public platformtransactionmanager annotationdriventransactionmanager ()  {         return new datasourcetransactionmanager (DataSource);     }     @Bean (name =  "sqlsessionfactory")      public sqlsessionfactory sqlsessionfactorybean ()  {         sqlsessionfactorybean bean = new sqlsessionfactorybean ();         bean.setdatasource (DataSource);         Try {            return bean.getobject () ;         } catch  (exception e)  {             e.printstacktrace ();             throw new runtimeexception (e);        }     }     @Bean     public SqlSessionTemplate  Sqlsessiontemplate (sqlsessionfactory sqlsessionfactory)  {         return new sqlsessiontemplate (sqlsessionfactory);     }}

Finally, what do you see in Configproperty? include at least the following: application, profile, label, key, value, other content can be increased or decreased according to actual needs.

Here are two ideas for reference:

One: In the configpropertity corresponding table stores the current configuration and historical configuration, through the version (or status bit) to differentiate, using the status bit of the advantage is that the overall amount of storage will be less, the advantage of using the version is to be able to find a historical version of the data without the need for analysis;

Second: Two tables, one palm storage currently in use in the configuration information, the other table is used to store the historical configuration information, each time there are changes to write two tables at the same time, the history table by appending, the current table in the updated way.

The above is a way to change Configserver's persistent storage from git to MySQL.

This article is from the "Valley Wind" blog, please be sure to keep this source http://1202955.blog.51cto.com/1192955/1920987

Change Springcloud configserver persistent storage to MySQL

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.