菜单

Spring boot的实际行使

2018年11月15日 - jQuery

题材讲述

思念以一个JAVA Class 向与一个Redis实例的不同 dbindex
写副数据,非常接近于StackOverflowe上之[How can select dbIndex when I
use RedisTemplate in
Spring-Data-Redis?。在立马首文章遭逢描述了怎么下Spring
boot访问Redis,在创建JedisConnectionFactory的早晚指定dbindex:

JedisConnectionFactory factory = new JedisConnectionFactory();
...
factory.setDatabase(databaseId);//set dbindex

用,大概思路是部署2只RedisTemplate,其中一个RedisTemplate负责访问dbindex=1的数据库;另一个RedisTemplate负责访问dbindex=3的数据库。

根据顿时首文章,因此通过
@Bean(name=)
生成多只RedisTemplate。但是由生成RedisTemplate需要传入JedisConnectionFactory实例,而我辈是以JedisConnectionFactory中指定了拜访Redis的谁数据库(dbindex)。因此,就于创建JedisConnectionFactory实例的下,使用
@Scope(scopeName = “prototype”)
注解,这样的话Jedis连接工厂便不再是单例模式了。因此,就起个别只JedisConnectionFactory实例,每个实例通过jedisConnectionFactory.setDatabase()设置不同之dbindex。这种方式或者那个愚蠢,会滋生严重的属性问题。

下面,来看看具体是怎么安排的:

    @Scope(scopeName = "prototype")
    public JedisConnectionFactory jedisConnectionFactory() {

    JedisPoolConfig config = getRedisConfig();
    JedisConnectionFactory factory = new JedisConnectionFactory(config);
    factory.setUsePool(true);
    factory.setHostName(host);
    factory.setPort(port);
    return factory;
    }

每调用平等赖jedisConnectionFactory()
返回一个新的JedisConnectionFactory实例。

下一场定义2单RedisTemplate Bean,jedisConnectionFactory.setDatabase()
方法分别设置不同之dbindex

 import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Map;

/**
 * Created by Administrator on 2018/4/9.
 */

@Configuration
public class LoginMacRedisConfig {

    private static final Logger logger = LoggerFactory.getLogger(LoginMacRedisConfig.class);
    @Value("1")
    private int logmacDatabaseId;

    @Value("3")
    private int mobmaskDatabaseId;


    @Bean
    public JedisPoolConfig getRedisConfig() {
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(8);
    config.setMinIdle(0);
    return config;
    }

    @Scope(scopeName = "prototype")
    public JedisConnectionFactory jedisConnectionFactory() {

    JedisPoolConfig config = getRedisConfig();
    JedisConnectionFactory factory = new JedisConnectionFactory(config);
    factory.setUsePool(true);
    factory.setHostName(host);
    factory.setPort(port);
    return factory;
    }

    @Bean(name = "login_mac")
    public RedisTemplate<String, Map<String, String>> logmacRedisTemplate() {
    final RedisTemplate<String, Map<String, String>> template = new RedisTemplate<>();

    JedisConnectionFactory jedisConnectionFactory = jedisConnectionFactory();
    jedisConnectionFactory.setDatabase(logmacDatabaseId);
    template.setConnectionFactory(jedisConnectionFactory);
    logger.info("host:{}, port:{}, database:{}", jedisConnectionFactory.getHostName(),jedisConnectionFactory.getPort(), jedisConnectionFactory.getDatabase());

    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    template.setKeySerializer(stringRedisSerializer);
    template.setHashKeySerializer(stringRedisSerializer);
    template.setHashValueSerializer(stringRedisSerializer);
    return template;
    }

    @Bean(name = "mobile_mask")
    public RedisTemplate<String, Map<String, String>> mobileMaskRedisTemplate() {
    final RedisTemplate<String, Map<String, String>> template = new RedisTemplate<>();
    JedisConnectionFactory jedisConnectionFactory = jedisConnectionFactory();
    jedisConnectionFactory.setDatabase(mobmaskDatabaseId);
    template.setConnectionFactory(jedisConnectionFactory);
    logger.info("host:{}, port:{}, database:{}", jedisConnectionFactory.getHostName(),jedisConnectionFactory.getPort(), jedisConnectionFactory.getDatabase());
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    template.setKeySerializer(stringRedisSerializer);
    template.setHashKeySerializer(stringRedisSerializer);
    template.setHashValueSerializer(stringRedisSerializer);
    return template;
    }
}

最后,再写一个Service类,就足以而且注入这有限只RedisTemplate,操作同一个Redis服务器上的差的dbindex了。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2018/4/10.
 */
@Service
public class RedisTestService {
    @Autowired
    @Qualifier("login_mac")
    private RedisTemplate<String, Map<String, String>> template1;

    @Autowired
    @Qualifier("mobile_mask")
    private RedisTemplate<String, Map<String, String>> template2;

    public void write2Redis() {
    HashOperations<String, String, String> hashOperations = template1.opsForHash();
    Map<String, String> values = new HashMap<>();
    values.put("dbindex", "1");
    hashOperations.putAll("123", values);

    template2.opsForHash().put("123", "dbindex", "3");
    }
}

图片 1

Application.java 启动类

@SpringBootApplication
public class Application implements CommandLineRunner{
    @Autowired
    private RedisTestService redisTestService;
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    @Override
    public void run(String... strings) throws Exception {
    redisTestService.write2Redis();
    }
}

在redisTestService对象中:有两个RedisTemplate实例:

图片 2

零星个RedisTemplate实例分别封装了少单JedisConnectionFactory:
图片 3

图片 4

调节结果下:

2018-04-10 20:18:34.754  INFO 13512 --- [           main] c.y.t.c.redis.LoginMacRedisConfig        : host:192.168.107.253, port:6379, database:1

2018-04-10 20:19:06.972  INFO 13512 --- [           main] c.y.t.c.redis.LoginMacRedisConfig        : host:192.168.107.253, port:6379, database:3

末查看写入Redis结果,可以观看:dbindex 1 暨 dbindex 3
都分别成功写副了数据。

redis 192.168.107.253:6379> SELECT 1
OK
redis 192.168.107.253:6379[1]> KEYS *
1) "123"
redis 192.168.107.253:6379[1]> HGET 123 dbindex
"1"
redis 192.168.107.253:6379[1]> SELECT 3
OK
redis 192.168.107.253:6379[3]> KEYS *
1) "123"
redis 192.168.107.253:6379[3]> HGET 123 dbindex
"3"

定义类的性质
这里用学科举例,
写好set get方法。
组织出参 无参函数。
描绘好to String基本上一个实体类即完成了。

额外补充

实际上如于同一个采取中走访不同的dbindex,一栽艺术是运JedisPool,JedisPool创建Jedis,然后调用select方法选择dbindex。具体贯彻可参考当即篇稿子。但这样的话,就未克以RedisTemplate的各种福利的接口读写Redis了。

    @Bean
    public JedisPool redisPoolFactory() {
        JedisPool jedisPool = new JedisPool(jedisPoolConfig(), host, port);
        Jedis jedis = jedisPool.getResource();
        jedis.select(3);
        return jedisPool;
    }

骨子里是得像说之:通过RedisConnectionCommand的 select
方法来选dbindex的,但是还是一样的题目,用非了RedisTemplate。

RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
DefaultStringRedisConnection stringRedisConnection = new   DefaultStringRedisConnection(redisConnection);
stringRedisConnection.select(2);
stringRedisConnection.set("test", "test");

除此以外这里为起相同篇Spring Boot
Redis多实例配置,也可参考一下。Spring
Boot 兼Redis新手,只能这样了。

原文:http://www.cnblogs.com/hapjin/p/8783084.html

图片 5

image.png

图片 6

image.png

接下来去接口实体类中重构这个法
提数量增长到list中。

web层就是controller 主要就上端传值 获取值 然后定义url。

此地的笺注 Controller 就是承认是controller类才能够实现相关职能
@reuqestmapping就是url
return的 是您前端写好的html的岗位。

图片 7

image.png

图片 8

此间有少只注释
第一独凡是Service 是为此来允许注入的
次只是Resource 用来调用其他类似吃的法门的 这里就是是调用dao中的方

前台用th标签直接获取数据就行了

下一场实体类继承接口

不久前一段时间一直以研 springboot的使用
下一场在大哥点下 对于后台整个的利用以及上宝传值
来了中心的思路 和 大致的想法。
当此地大概的记录转布局以及设法。
坐对数码没有实际要求
故而任何后台是经过数组来成功的 并没有连接数据库

图片 9

实业类中若增补加注@Component
dao层完成。

image.png

service层就是之所以来连续web层和dao层的
关键的企图就是是 如果dao层中之方法想如果翻新 想要反 直接以dao层修改就得
并无见面印象及这个措施 面向web层的以。
故service层就是来调用dao中之章程的。
第一新建一个接口

于是底each循环 m是自从定义变量 netclasslist是key值
classname 和 classid 都是属性值。
前台就足以展示数据了。

图片 10

image.png

image.png

图片 11

dao层主要是面向数据库的
于这边因不用数据库 所以把关于数据的操作放在了dao里
亟待以数据库时 只要将list的喻句改也数据库语句就足以了。
当接口里定义一个办法。
为此来抱具有的教程信息

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图