最近要做一个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; } }