动态指定数据持久化方案

最近要做一个PAAS系统,有这样一个需求:

(1)需求:根据配置文件动态的指定持久化方案

(2)说明:这个持久化方案可以是文件系统/mysql/oracle

思考:

(1)三种处理方式是一定要有三套解决方案的

(2)同一套系统的同一套功能是需要有统一的接口的

(3)需要有一个全局的变量来控制具体使用哪一套解决方案

解决:

(1)首先应该抽象一套接口

(2)写三套实现方式,即每个抽象的接口都有三个具体的实现类

(3)三个实现类上注明注入条件,根据配置文件的配置信息决定将哪一套实现类注入到spring容器中

代码结构:

 根据配置文件注入实现类:

(1)配置文件(application.properties)中添加配置():

#mysql/file/oracle
db.type=mysql

(2)接口的实现类添加注解:

package com.googosoft.service.impl.mysql;

import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import com.googosoft.constant.HostStatus;
import com.googosoft.model.Host;
import com.googosoft.service.HostService;

/**
 * @author songyan
 * @date 2020年4月8日 下午9:19:27
 * @desc
 */
@Configuration
@ConditionalOnProperty(prefix = "db",name = "type",havingValue = "mysql") 
public class HostServiceMysqlImpl implements HostService{

    @Override
    public List<Host> getList(int page, int limit) {
        List<Host> hostList = new ArrayList<Host>();
        for (int i = 0; i < 15; i++) {
            hostList.add(new Host("mysql——hostname"+i,12,"192.168.11."+(i+1)%10,HostStatus.NORMAL));
        }
        return hostList;
    }

    @Override
    public int getListCount(int page, int limit) {
        return 15;
    }

}
原文地址:https://www.cnblogs.com/excellencesy/p/12666327.html