将SpringCloud ConfigServer持久化存储改为MySQL

  

原文发布于:http://www.gufeng.tech/ ,谷风的个人主页

1。背景

<?,,,SpringCloud的ConfigServer默认是持久化使用的是git.git有它天然的优势,比如多版本管理,分支管理,提交审核策略等等,但是如果相对其中存储的数据做细粒度的权限控制,就力不从心了。当然,也可以改变使用方式以适应这种特点,但是今天我们要做的是将持久化从git迁移到MySQL上。

2。查询配置信息

<?,,,ConfigServer有个接口:org.springframework.cloud.config.server.environment.EnvironmentRepository,这个接口的实现类就是ConfigServer的用来查询配置信息的,方法签名如下:

,应用,环境findOne(字符串,字符串,字符串标签),

<?,,,我们可以实现这个接口,在方法实现中查询MySQL,由此看来,我们已经成功一半了,另一半就是解决如何把数据存到MySQL中。我们还是先解决查询的问题,我们实现该方法内容如下:

 public  class  DatabasesEnvironmentRepository  implements  EnvironmentRepository  {
  
  ,,,@Autowired  private  ConfigService  configService;
  
  ,,,@Override ,,, public  Environment  findOne (String 应用程序,String ,, String 标签),{,,,,,,,if  (StringUtils.isEmpty(应用程序),| |,StringUtils.isEmpty(剖面)),,,,,,,,,,,,return 零;
  ,,,,,,,ConfigItem  ConfigItem =, configService.findConfig(应用程序,,,,标签),,,,,,,,,if  (ConfigItem  !=, null), {
  ,,,,,,,,,,,Environment  Environment =, new 环境(应用程序,,StringUtils.commaDelimitedListToStringArray(概要)
  ,,,,,,,,,,,,,,,,,,,,,configItem.getVersion ());
  
  ,,,,,,,,,,,Map  Map =, new  HashMap<在(),,,,,,,,,,,,,for  (ConfigProperty  ConfigProperty : configItem.getConfigProperties ()), {
  ,,,,,,,,,,,,,,,map.put (configProperty.getKey (),, configProperty.getValue ());
  ,,,,,,,,,,,}
  
  ,,,,,,,,,,,environment.add (new  PropertySource(时间+ application “_”, +, profile  +,“_”, +,标签,地图)),,,,,,,,,,,,,return 环境;
  ,,,,,,,},,,,,,,,return  new 环境(应用程序,,StringUtils.commaDelimitedListToStringArray(剖面));
  ,,,}
  
  }

<?,,,接下来我们看一下ConfigService类的内容:

 @Servicepublic  class  ConfigService  {
  
  ,,,@Autowired  private  ConfigDAO  configDAO;,,,, public  ConfigItem  findConfig (String 应用程序,String ,, String 标签),{
  ,,,,,,,ConfigItem  ConfigItem =, configDAO.findConfig(应用程序,,,,标签),,,,,,,,,if  (null ==, configItem), {,,,,,,,,,,, return 零;
  ,,,,,,,}
  ,,,List  configProperties =, configDAO.findConfigProperties (configItem.getId ());
  ,,,,,,,configItem.setConfigProperties (configProperties);,,,,,,,, return  configItem;
  ,,,}
  
  }

,

<?,,,最后我们看一下ConfigDAO的实现:

 @Mapperpublic  interface  ConfigDAO  {
  
  ,,,@Select (“select  *,得到config_item  where  application =, #{应用},以及profile =, #{概要},以及label =, #{标签}”)
  ,,,List  findConfigProperties (@Param(“应用程序”),String 应用程序,,@Param(“资料”),String ,, @Param(“标签”),String 标签);
  
  }

<?,,这里我们使用的是MyBatis的注解方式,关于MyBatis的注解使用详细内容请查阅相关文档。

3。数据库相关功能

<?,,,我们首先看下数据源的配置:

 @Configurationpublic  class  DataSourceConfiguration  {
  
  ,,,@ value (" $ {jdbc.driver} "),,,, private  String 驱动;
  ,,,@ value (" $ {jdbc.url} "),,,, private  String  url;
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

将SpringCloud ConfigServer持久化存储改为MySQL