什么是Spring Boot?

发布网友 发布时间:2022-04-24 04:52

我来回答

3个回答

懂视网 时间:2022-05-03 16:14

 

 

DateSource 定义注解
DateSourceContext 定义ThreadLocal上下文
DataSourceRouteAspect会拦截注解dataSource的方法,业务方法之前设置数据源,设置到ThreadLocal中
   也可根据业务参数自主设置数据源,达到分库效果 
DruidConfig 配置多数据源
MybatisConfig 扫描sql配置类
RouteDataSource 通过继承AbstractRoutingDataSource重写,获取ThreadLocal中的数据源



@Target({ ElementType.METHOD,ElementType.TYPE,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
 String value() default "";
}

public class DataSourceContext {
 private static final ThreadLocal<String> context = new ThreadLocal<>();
 public static void setDataSource(String value){
 context.set(value);
 }
 public static String getDataSource(){
 return context.get();
 }
 public static void clearDataSource(){
 context.remove();
 }
}

@Aspect
@Component
public class DataSourceRouteAspect {
 @Before("@annotation(dataSource)")
 public void selectDateSource(JoinPoint point, DataSource dataSource){
 String value = dataSource.value();
 DataSourceContext.setDataSource(value);
 }
 @After("@annotation(dataSource)")
 public void removeDataSource(JoinPoint point, DataSource dataSource){
 DataSourceContext.clearDataSource();
 }
}

@Configuration
public class DruidConfig {
// @Value("${mysql.one.aliasName}")
// private String aliasNameOne;
// @Primary
 @Bean(name="dataSourceOne",initMethod = "init",destroyMethod = "close")
 @ConfigurationProperties(prefix = "mysql.one")
 public DruidDataSource dataSourceOne(){
 DruidDataSource dataSource = new DruidDataSource();
 dataSource.setQueryTimeout(300);
 dataSource.setTestWhileIdle(true);
 dataSource.setTestOnBorrow(true);
 dataSource.setTestOnReturn(true);
 dataSource.setTimeBetweenEvictionRunsMillis(600000);
 dataSource.setMinEvictableIdleTimeMillis(300000);
 return dataSource;
 }
// @Bean(name="dataSourceTwo",initMethod = "init",destroyMethod = "close")
// @ConfigurationProperties(prefix = "mysql.two")
// public DruidDataSource dataSourceOne(){
// return dataSource;
// }
 @Bean(name = "routeDataSource")
 public RouteDataSource dataSource(@Qualifier("dataSourceOne")DruidDataSource dataSourceOne
// ,@Qualifier("dataSourceTwo")DruidDataSource dataSourceTwo
 ){
 Map<Object, Object> targetDataSources = new HashMap<>();
 targetDataSources.put("dataSourceOne",dataSourceOne);
// targetDataSources.put("dataSourceTwo",dataSourceTwo);
 RouteDataSource dataSource = new RouteDataSource();
 dataSource.setTargetDataSources(targetDataSources);
 dataSource.setDefaultTargetDataSource(dataSourceOne);
 System.out.println("routeDataSource******************"+dataSource);
 return dataSource;
 }
}

@Configuration
public class DruidConfig {
// @Value("${mysql.one.aliasName}")
// private String aliasNameOne;
// @Primary
 @Bean(name="dataSourceOne",initMethod = "init",destroyMethod = "close")
 @ConfigurationProperties(prefix = "mysql.one")
 public DruidDataSource dataSourceOne(){
 DruidDataSource dataSource = new DruidDataSource();
 dataSource.setQueryTimeout(300);
 dataSource.setTestWhileIdle(true);
 dataSource.setTestOnBorrow(true);
 dataSource.setTestOnReturn(true);
 dataSource.setTimeBetweenEvictionRunsMillis(600000);
 dataSource.setMinEvictableIdleTimeMillis(300000);
 return dataSource;
 }
// @Bean(name="dataSourceTwo",initMethod = "init",destroyMethod = "close")
// @ConfigurationProperties(prefix = "mysql.two")
// public DruidDataSource dataSourceOne(){
// return dataSource;
// }
 @Bean(name = "routeDataSource")
 public RouteDataSource dataSource(@Qualifier("dataSourceOne")DruidDataSource dataSourceOne
// ,@Qualifier("dataSourceTwo")DruidDataSource dataSourceTwo
 ){
 Map<Object, Object> targetDataSources = new HashMap<>();
 targetDataSources.put("dataSourceOne",dataSourceOne);
// targetDataSources.put("dataSourceTwo",dataSourceTwo);
 RouteDataSource dataSource = new RouteDataSource();
 dataSource.setTargetDataSources(targetDataSources);
 dataSource.setDefaultTargetDataSource(dataSourceOne);
 System.out.println("routeDataSource******************"+dataSource);
 return dataSource;
 }
}

public class RouteDataSource extends AbstractRoutingDataSource {
 @Override
 protected Object determineCurrentLookupKey() {
 return DataSourceContext.getDataSource();
 }
}


mapper配置类
import cn.com.config.dbConfig.DataSource;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface MyTestIbatis extends BaseMapper<String>{
 @DataSource("dataSourceOne")
 @Select("select id from tbl_user")
 List<String> selectStr();
}

import tk.mybatis.mapper.common.Mapper;
public interface BaseMapper<T> extends Mapper<T> {
}


@Autowired
MyTestIbatis myTestIbatis;
myTestIbatis.selectStr()

  

springboot&数据库连接池&切面动态数据源

标签:aspect   oid   amp   app   auto   cer   table   java   nec   

热心网友 时间:2022-05-03 13:22

Spring Boot 可以轻松创建的、生产级的基于 Spring 的应用程序,您可以“直接运行”这些应用程序。

我们对 Spring 平台和第三方库采取了固执的观点,因此您可以轻松上手。大多数 Spring Boot 应用程序需要最少的 Spring 配置。

Spring中国教育管理中心

特征

了解更多,可查询Spring中国教育管理中心相关信息

热心网友 时间:2022-05-03 14:40

当前互联网后端开发中,JavaEE占据了主导地位。对JavaEE开发,首选框架是Spring框架。在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使Spring框架运行起来,这点备受许多开发者诟病。为了进一步简化Spring应用的开发,SpringBoot诞生了。

其设计目的是为了进一步简化Spring应用的搭建及开发过程;

如今,在互联网公司中,对于后端开发工程师来说,SpringBoot已经一统江湖了,如果你不懂SpringBoot,可以说是落后与时代!如果你在做后端开发,而且对SpringBoot看的不是很明白,传智就业班视频中有详细解释,可以下载去学习。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com