1.配置多数据源
在application.properties中定义两个DataSource
定义两个DataSourceConfigJava类
可以在不同的package下创建各自的实体和数据访问接口,也可以通过@Transactional(transactionManager="transactionManagerOne")
Naming命名策略详解及实践
ImplicitNamingStrategy
PhysicalNamingStrategy
Spring data Redis配置
//新版的配置,同时要求jedis和spring data有一定的兼容性设置
@Configuration
public class RedisConfiguration {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private Integer port;
@Bean
public JedisConnectionFactory redisConnectionFactory(){
//jedis必须通过不同的
RedisStandaloneConfiguration configuration=new RedisStandaloneConfiguration();
configuration.setHostName(host);
configuration.setPort(port);
return new JedisConnectionFactory(configuration);
}
@Bean
public RedisTemplate<String,String> redisTemplate(JedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,String> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
Spring Cache:
配置的条件注解会自动加载对应的cacheManager等
Spring cache主要接口
@Cacheable:
@CacheEvict:
@Caching:
一般配置在service层!
1.spring.factories
2.CacheAutoConfiguration
实现自定义的配置
key生成器:
SpEL表达式讲解
1.xml文件中
2.@value
3.SpEL Java Api使用方法
逻辑运算操作
可以直接获取bean
public class testSqEL {
public static void main(String[] args) {
Student student=new Student();
student.setGender('m');
student.setAge(100);
student.setName("123");
student.setId(1l);
System.out.println(student);
ExpressionParser parser=new SpelExpressionParser();
Expression expression=parser.parseExpression("name");
EvaluationContext context=new StandardEvaluationContext(student);
System.out.println((String)expression.getValue(context));
context.getPropertyAccessors().stream().forEach(e->{
System.out.println(e.getSpecificTargetClasses());
});
}
}
//StandardEvaluationContext创建相对比较耗资源,在重复多次使用场景下,内部会缓存部分中间状态加快后续表达式的求值效率。
SpEL表达式在jpa中有很多使用方面,需要多研究
import java.util.ArrayList;
import java.util.List;
public class TestSpEL {
@Data
private static class Simple{
private List<Boolean> list=new ArrayList(){{
add(true);
add(false);
add(true);
}};
}
public static void main(String[] args) {
Student student=new Student();
student.setGender('m');
student.setAge(100);
student.setName("123");
student.setId(1l);
System.out.println(student);
ExpressionParser parser=new SpelExpressionParser();
Expression expression=parser.parseExpression("name");
EvaluationContext context=new StandardEvaluationContext(student);
System.out.println((String)expression.getValue(context));
Simple simple=new Simple();
System.out.println(simple);
//可以显式配置对象,指定在表达式中使用的变量和函数,并进行更改
StandardEvaluationContext standardEvaluationContext=new StandardEvaluationContext(simple);
parser.parseExpression("list[0]").setValue(standardEvaluationContext,"false");
System.out.println(simple.getList().get(0));
//SpelParserConfiguration编译器配置
SpelParserConfiguration configuration=new SpelParserConfiguration(true,true);
ExpressionParser expressionParser=new SpelExpressionParser(configuration);
Expression expression1 = parser.parseExpression("list[1]");
System.out.println(expression1.getValue(simple));
}
}