springboot整合其他技术集结

791 阅读6分钟

导读

首发于公众号:JAVA大贼船,原创不易,喜欢的读者可以关注一下哦!一个分享java学习资源,实战经验和技术文章的公众号!

一、SpringBoot整合springmvc

springboot默认配置已经可以使用SpringMVC了,不过有时候需要进行自定义配置。

修改端口

查看SpringBoot的全局属性可知,端口通过以下方式配置:

# 映射端口
server.port= 6666

访问静态资源

源码查看ResourceProperties自动配置类,默认的静态资源路径为:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public

只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。

添加拦截器

定义一个拦截器:实现HandlerInterceptor或继承HandlerInterceptorAdapter。建议使用HandlerInterceptorAdapter,因为可以按需进行方法的覆盖。

public class LoginInterceptor implements HandlerInterceptor {

    private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        logger.debug("preHandle method is now running!");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        logger.debug("postHandle method is now running!");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        logger.debug("afterCompletion method is now running!");
    }
}

定义配置类,注册拦截器:

@Configuration
public class MvcConfig implements WebMvcConfigurer{
    /**
     * 通过@Bean注解,将我们定义的拦截器注册到Spring容器
     * @return
     */
    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }

    /**
     * 重写接口中的addInterceptors方法,添加自定义拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
        registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
    }
}

二、SpringBoot整合数据库相关技术

创建user表

在test数据库中创建user表

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123');
INSERT INTO `user` VALUES ('2', 'lisi', '123');
添加数据库连接信息

在application.properties配置

#数据库:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
添加数据库驱动
<!-- MySQL连接驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

SpringBoot整合Mybatis

添加Mybatis的起步依赖
<!--mybatis起步依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
添加数据库连接信息

在application.properties配置

#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.ao.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
编写实体
public class User {
    // 主键
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
  
    //此处省略getter和setter方法 .. ..
    
}
编写Mapper
@Mapper
public interface UserMapper {
 public List<User> queryUserList();
}

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

配置Mapper映射文件

在src\main\resources\mapper路径下加入UserMapper.xml配置文件"

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ao.mapper.UserMapper">
    <select id="queryUserList" resultType="user">
        select * from user
    </select>
</mapper>

测试略


SpringBoot整合Spring Data JPA

添加Spring Data JPA的起步依赖
<!-- springBoot JPA的起步依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
application.properties中配置jpa的相关属性
#JPA相关配置:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
编写实体
@Entity
public class User {
    // 主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
 
    //此处省略setter和getter方法... ...
}
编写UserRepository
public interface UserRepository extends JpaRepository<User,Long>{
    public List<User> findAll();
}

测试略


SpringBoot整合通用mapper

添加依赖
<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
编写实体
@TableName("t_user")
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
 
    private String username;
   
    private String password;
  
    //此处省略getter和setter方法 .. ..
    
}
编写Mapper

不需要做任何配置就可以使用了,注意记得在mapper接口添加@Mapper注解

@Mapper
public interface UserMapper extends Mapper<User>{
}

测试略


SpringBoot整合mybatis-plus

引入依赖
 <!--mybatis-plus依赖包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>
application.properties中配置相关属性
#mybatis-plus 相关
mybatis-plus:
  # 支持枚举类型
  typeEnumsPackage: com.ao.dto.enums
  global-config:
    sql-parser-cache: true
    db-config:
      logic-delete-field: deleted  #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL
编写实体

可在官方下载代码生成器

@TableName("t_user")
public class User {
    @TableField("id")
    private Long id;
    @TableField("username")
    private String username;
    @TableField("password")
    private String password;
  
    //此处省略getter和setter方法 .. ..
    
}
service接口
public interface IUserService extends IService<User> {

}
service实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

}
编写Mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {

}
编写Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ao.demo.mapper.UserMapper">

</mapper>

测试略

三、SpringBoot整合Junit

引入依赖

<!--测试的起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

编写测试类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestSpringBootApplication.class)
public class MapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test() {
        List<User> users = userMapper.queryUserList();
        System.out.println(users);
    }

}

SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以

public final class SpringRunner extends SpringJUnit4ClassRunner 

@SpringBootTest的属性指定的是引导类的字节码对象

四、SpringBoot整合Redis

添加redis的起步依赖
<!-- 配置使用redis启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置redis的连接信息
 #redis 相关
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    database: 2 #默认就是0
    #redis  jedis  相关
    jedis:
      pool:
        #      连接池最大连接数(使用负值表示没有限制)
        max-active: 100
        #     连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
        #     连接池中的最大空闲连接
        max-idle: 8
        #     连接池中的最小空闲连接
        min-idle: 0
redis服务层
@Component
public class RedisService{
 @Autowired
 private RedisTemplate<String, String> stringRedisTemplate;
 
 /**
  * 设置key并设置过期时间
  * @param key
  * @param value
  * @param time 单位为秒
  * @return
  */
 public boolean set(String key,String value,Long time) {
  try {
   stringRedisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS); 
   return true;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return false;
 }
    /**
  * 获取
  */
 public String get(String key) {
  try {
   return stringRedisTemplate.opsForValue().get(key);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
    .........

测试略

五、SpringBoot整合dubbo

搭建提供方

引入依赖
<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
 </dependency>
配置文件
dubbo:
  monitor:
#  连接监控中心 在注册中心中自动发现
    protocol: registry
  protocol:
#  指定通信规则(通信协议/通信端口)
    name: dubbo
    port: 20885
  registry:
#  2、指定注册中心的位置 
    protocol: zookeeper
    address: 127.0.0.1:2181
  application:
# 指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
    name: user_provide
    
暴露服务的实现类
//@Service为dubbo的注解
@Service
@Component
public class UserServiceImpl implements IUserService {
    @Override
    public List<User> findAll(){
        return UserMapper.findAll();
        
    }

}

搭建消费方

引入依赖
<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
 </dependency>
配置文件
# dubbo相关配置
dubbo:
  application:
    name: user_consumer
  registry:
    address: zookeeper://127.0.0.1:2181
  monitor:
    protocol: registry
  #  monitor:
  #    protocol: registry
  consumer:
    #  关闭所有服务的启动时检查 (没有提供者时报错):
    check: false
    #    超时失败时间,单位为毫秒,默认为1    timeout: 10000
    #    失败重试次数
    retries: 2
    
消费接口实现类
//@Service为dubbo的注解
@Service
@Component
public class TestServiceImpl implements ITestService {
    @Reference //使用dubbo提供的reference注解引用远程服务
 UserService userService;
    
    @Override
    public List<User> findAll(){
        return userService.findAll();
        
    }

}

测试略

感谢您赏脸收看,喜欢可以关注一下哦!一个分享java学习资源,技术文章,实战经验的公众号~ 在这里插入图片描述