1200页Java架构面试专题及答案
小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞
百度、字节、美团等大厂常见面试题
增加双数据源的数据库配置
spring:
datasource:
datasource1:
url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useAffectedRows=true
username: admin
password: 1024571
driver-class-name: com.mysql.jdbc.Driver
filters: stat,wall
initial-size: 1
min-idle: 1
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 30000
validation-query: SELECT ‘x’
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
datasource2:
url: jdbc:mysql://localhost:3307/user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useAffectedRows=true
username: admin
password: 1024571
driver-class-name: com.mysql.jdbc.Driver
filters: stat,wall
initial-size: 1
min-idle: 1
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 30000
validation-query: SELECT ‘x’
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
自定义注解
自定义数据源key的注解,value为数据源key
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface DataSource {
String value() default “data1”;
}
数据源key设置
@Slf4j
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal<>();
// 设置数据源名称
public static void setDataSource(String dataSource){
contextHolder.set(dataSource);
}
public static String getDataSource(){
return contextHolder.get();
}
// 清除数据源
public static void clearDataSource(){
contextHolder.remove();
}
}
动态数据源类
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSource();
}
}
数据源配置类
定义双数据源的key和bean对应关系
@Configuration
public class DataSourceConfig {
/**
- 数据源1
*/
@Bean(name = “data1”)
@ConfigurationProperties(prefix = “spring.datasource.data1”)
public DataSource Data1(){
return DataSourceBuilder.create().build();
}
/**
- 数据源2
*/
@Bean(name = “data2”)
@ConfigurationProperties(prefix = “spring.datasource.data2”)
public DataSource Data2(){
return DataSourceBuilder.create().build();
}
/**
- 数据源切换: 通过AOP在不同数据源之间动态切换
*/
@Primary
@Bean
public DataSource dynamicDataSource(){
DynamicDataSource dynamicDataSource = new DynamicDataSource();
//设置默认数据源
dynamicDataSource.setDefaultTargetDataSource(Data1());
//配置多数据源
Map<Object,Object> dsMap = new HashMap<>();
dsMap.put(“data1”,Data1());
dsMap.put(“data2”,Data2());
dynamicDataSource.setTargetDataSources(dsMap);
return dynamicDataSource;
}
/**
-
配置@Transactional注解事务
-
@return
*/
@Bean
最后
在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
yb7MS-1714889614761)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!