SpringDataJpa详解(四)

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));

    }
}

猜你喜欢

转载自blog.csdn.net/qq_29164145/article/details/90752018