设为首页 收藏本站
查看: 946|回复: 0

[经验分享] springboot学习笔记

[复制链接]

尚未签到

发表于 2017-12-15 06:26:32 | 显示全部楼层 |阅读模式
  一.整合redis
  1.1 建立实体类
  

@Entity  
@Table(name
="user")  

public>@Id  @GeneratedValue(strategy
=GenerationType.AUTO)private Long>private String name;  @DateTimeFormat(pattern
="yyyy-MM-dd HH:mm:ss")private Date createDate;  @JsonBackReference        
//防止json的重复引用问题  private Department department;
  private Set<Role> roles;
  public Long getId() {

  return>  }
  public void setId(Long>  this.id =>  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public Date getCreateDate() {
  return createDate;
  }
  public void setCreateDate(Date createDate) {
  this.createDate = createDate;
  }
  public Department getDepartment() {
  return department;
  }
  public void setDepartment(Department department) {
  this.department = department;
  }
  public Set<Role> getRoles() {
  return roles;
  }
  public void setRoles(Set<Role> roles) {
  this.roles = roles;
  }
  @Override
  public String toString() {
  return "User [id=" +>  + ", roles=" + roles + "]";
  }
  
}
  

  1.2 建立Redis的配置类
   首先导入pom.xml相应的依赖
  

<dependency>  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-redis</artifactId>
  
</dependency>
  

  在springboot中,没有去提供直接操作Redis的Repository,但是我们可以使用RedisTemplate去访问Redis.想要去使用RedisTemplate,首先需要完成一些必要的配置.这里使用配置类去完成.
  在application.properties中建立Redis的相关配置:
DSC0000.png

  建立配置类,配置RedisTemplate,而要使用RedisTemplate还需要配置RedisConnectionFactory:
  

@ConfigurationProperties("application.properties")  
@Configuration
  

public>@Value(
"${spring.redis.hostName}")private String hostName;  @Value(
"${spring.redis.port}")private Integer port;  

  @Bean
public RedisConnectionFactory redisConnectionFactory() {  JedisConnectionFactory cf
= new JedisConnectionFactory();  cf.setHostName(hostName);  
  cf.setPort(port);
  cf.afterPropertiesSet();  
return cf;  }
  @Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {  StringRedisTemplate template
=new StringRedisTemplate(factory);  Jackson2JsonRedisSerializer jackson2JsonRedisSerializer
=new Jackson2JsonRedisSerializer(Object.class);  ObjectMapper om
=new ObjectMapper();  om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
  om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  jackson2JsonRedisSerializer.setObjectMapper(om);
  template.setValueSerializer(jackson2JsonRedisSerializer);
  template.afterPropertiesSet();
return template;  }
  
}
  

  1.3 建立UserRedis类,它实现了与Redis的交互
  注意,在UserRedis中,使用了Redis的数据结构中最常用的key-value都是字符串的形式,采用Gson将对象转化为字符串然后存放到redis中.
  

@Repository  

public>@Autowired
private RedisTemplate<String, String> redisTemplate;public void add(String key,User user) {  Gson gson
=new Gson();  redisTemplate.opsForValue().set(key,gson.toJson(user));
  }
public void add(String key,List<User> users) {  Gson gson
=new Gson();  redisTemplate.opsForValue().set(key,gson.toJson(users));
  }
public User get(String key ) {  Gson gson
=new Gson();  User user
=null;  String userStr
=redisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(userStr))  user
=gson.fromJson(userStr, User.class);return user;  }
public List<User> getList(String key) {  Gson gson
=new Gson();  List
<User> users=null;  String listJson
=redisTemplate.opsForValue().get(key);if(!StringUtils.isEmpty(listJson)) {  users
=gson.fromJson(listJson,new TypeToken<List<User>>(){}.getType());  }
return users;  }
public void delete(String key) {  redisTemplate.opsForValue().getOperations().delete(key);
  }
  
}
  

  1.4 建立UserController类
  它自动注入了UserRedis类,通过不同的url实现了向redis存储数据,获取数据的功能.
  

@Controller  

public>@Autowired
  UserRedis userRedis;
  @RequestMapping(
"/user/testRedisSave")public String testRedis() {  Department department
=new Department();  department.setName(
"开发部");  Role role
=new Role();  role.setName(
"admin");  User user
=new User();  user.setName(
"hlhdidi");  user.setCreateDate(
new Date());  user.setDepartment(department);
  Set
<Role> roles=new HashSet<>();  roles.add(role);
  user.setRoles(roles);
  userRedis.delete(
this.getClass().getName()+":username:"+user.getName());  userRedis.add(
this.getClass().getName()+":username:"+user.getName(), user);return null;  }
  @RequestMapping(
"/user/testRedisGet")public String testRedis2() {  User user
=userRedis.get(this.getClass().getName()+":username:hlhdidi");  System.out.println(user);
return null;  }
  
}
  

  先访问localhost:8080/user/testRedisSave,再访问localhost:8080/user/testRedisGet,即可测试成功!
  二.整合MongoDB
  MongoDB是一种文档类型的NoSql数据库.它内部有三个层次的概念,分别为数据库,集合,文档.使用springboot可以非常方便的整合MongoDB
  2.1 建立mongo.properties配置文件
DSC0001.png

  导入依赖:
  

<dependency>  <groupId>org.pegdown</groupId>
  <artifactId>pegdown</artifactId>
  <version>1.4.1</version>
  </dependency>
  <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-hateoas</artifactId>
  </dependency>
  <dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  </dependency>
  <dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  </dependency>
  

  2.2 建立MongoConfig配置类,完成对于MongoDB的配置
  

@Configuration  
@EnableMongoRepositories(basePackages
={"com.hlhdidi.springboot.mongo"})//MongoRepository的扫描包  
@PropertySource("classpath:mongo.properties")//注入配置文件属性

  
public>  

  @Autowired
  private Environment env;
  @Override
  protected String getDatabaseName() {
  return env.getRequiredProperty("mongo.name");
  }
  

  @Override
  @Bean
  public Mongo mongo() throws Exception {
  ServerAddress serverAddress=new ServerAddress(env.getRequiredProperty("mongo.host"));
  List<MongoCredential> credentials=new ArrayList<>();
  return new MongoClient(serverAddress, credentials);
  }
  

  
}
  

  2.3 建立SysUser实体类.
  该实体类需要被存储到MongoDB数据库中.
  

@Document(collection="user")//配置collection的名称,如果没有将会自动建立对应的Collection  
public>  @Id
  private String userId;
  @NotNull @Indexed(unique=true)
  private String username;
  @NotNull
  private String password;
  @NotNull
  private String name;
  @NotNull
  private String email;
  @NotNull
  private Date registrationDate=new Date();
  private Set<String> roles=new HashSet<>();
  public SysUser(){}
  @PersistenceConstructor
  public SysUser(String userId, String username, String password, String name, String email, Date registrationDate,
  Set<String> roles) {
  super();
  this.userId = userId;
  this.username = username;
  this.password = password;
  this.name = name;
  this.email = email;
  this.registrationDate = registrationDate;
  this.roles = roles;
  }
  public String getUserId() {
  return userId;
  }
  public void setUserId(String userId) {
  this.userId = userId;
  }
  public String getUsername() {
  return username;
  }
  public void setUsername(String username) {
  this.username = username;
  }
  public String getPassword() {
  return password;
  }
  public void setPassword(String password) {
  this.password = password;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getEmail() {
  return email;
  }
  public void setEmail(String email) {
  this.email = email;
  }
  public Date getRegistrationDate() {
  return registrationDate;
  }
  public void setRegistrationDate(Date registrationDate) {
  this.registrationDate = registrationDate;
  }
  public Set<String> getRoles() {
  return roles;
  }
  public void setRoles(Set<String> roles) {
  this.roles = roles;
  }
  @Override
  public String toString() {
  return "SysUser [userId=" + userId + ", username=" + username + ", password=" + password + ", name=" + name
  + ", email=" + email + ", registrationDate=" + registrationDate + ", roles=" + roles + "]";
  }
  
}
  

  2.4 建立SysUserRepository
  由于springboot已经帮我们提供了操作MongoDB数据库的API,因此直接继承对应的类即可(和JPA一致)
  

@Repository  

public interface SysUserRepository extends MongoRepository<SysUser, String>{  

  
}
  

  2.5 测试
  测试类先向MongoDB中存储了一个实体类对象,随后获取指定对象的指定Collections下面的所有文档
  

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(classes
={MongoConfig.class})  
@FixMethodOrder
  

public>@Autowired
  SysUserRepository repository;
  @Before
public void setup() {  Set
<String> roles=new HashSet<>();  roles.add(
"manage");  SysUser sysUser
=new SysUser("1", "hlhdidi", "123", "xiaohulong", "email@com.cn", new Date(), roles);  repository.save(sysUser);
  }
  @Test
public void findAll() {  List
<SysUser> users=repository.findAll();for(SysUser user:users) {  System.out.println(user);
  }
  }
  
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424219-1-1.html 上篇帖子: springboot-mongodb的多数据源配置 下篇帖子: Asp.Net Core MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表