Springboot项目开发总结

spring boot简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

其特点在spring web项目配置方面做了很大简化:
如之前:
1)配置web.xml,加载spring和spring mvc
2)配置数据库连接、配置spring事务
3)配置加载配置文件的读取,开启注解
4)配置日志文件
5 )配置完成搭建tomcat进行服务部署

而springboot将各项配置集成起来。对于项目针对性的配置在application.properties文件声明。springboot在启动时自动加载各项配置信息
springboot内嵌tomcat只需要java -jar 启动jar包 即可将项目装载到tomcat java -jar app.jar –spring.profiles.active=dev (可指定读取环境配置)
启动入口;Application.java (注解:@SpringBootApplication)

基础springboot依赖(包含项目基本的一些jar 包依赖)
spring-boot-starter :核心模块,包括自动配置支持、日志和YAML;

spring-boot-starter-test :测试模块,包括JUnit、Hamcrest、Mockito。
项目建立结构

controller:页面访问控制
service:业务类代码
domain:主要放些实体信息


web开发
json接口开发: 页面访问类添加 @RestController 即可,默认类中的方法都会以json的格式返回。
自定义property:一般配置文件在application.properties中,项目启动时自动加载。通过 @Value(“${com.neo.title}”)属性获取对应值
log配置:可在application.properties 中(springboot集成了logback相应jar 包)
logging.path=/user/local/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
注:一般情况集中logback 定义logback.xml中配置对应输出路径及等级


数据库:添加对应jar包 如mysql

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
 <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-`connector`-javaartifactId>
dependency>

对应数据库加载信息配置。添加application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true

数据库多数据源配置:http://www.jianshu.com/p/34730e595a8c
http://www.jianshu.com/p/34730e595a8c

mybatis-spring-boot-starter
在启动类中添加对mapper包扫描@MapperScan。

1.无xml配置版

public interface UserMapper {

    @Select("SELECT * FROM users")
    @Results({
        @Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
        @Result(property = "nickName", column = "nick_name")
    })
    List getAll();
* @Select 是查询类的注解,所有的查询均使用这个

* @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。

* @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值

* @Update 负责修改,也可以直接传入对象

*@delete 负责删除

2.有xml配置版本
application.properties新增以下配置。

mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

mybatis基础配置文件和实体类映射文件的地址。

<typeAlias alias="LinkedList" type="java.util.LinkedList" />
<mapper namespace="com.neo.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.neo.entity.UserEntity" >
        <id column="id" property="id" jdbcType="BIGINT" />
   resultMap>
 <delete id="delete" parameterType="java.lang.Long" >
       DELETE FROM
             users 
       WHERE 
             id =#{id}
    delete>
public interface UserMapper {
       void delete(Long id);
}

注解模式:适合简单快捷的迭代,比较适应现在的微服务,多表连接的需求低。一般只针对一个库和表
传统配置模式:可以灵活动态的生成SQL方便sql调整。但是编写时手工维护成本多。

集成redis
1.引入 spring-boot-starter-redis
2. 添加配置文件# Redis服务器地址
spring.redis.host=192.168.0.58
spring.redis.port=6379
spring.redis.password=

3.添加cache的配置类


页面集成Thymeleaf
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。

使用基本简介:https://www.tianmaying.com/tutorial/using-thymeleaf


RabbitMQ介绍

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

    * 左侧 P 代表 生产者,也就是往 RabbitMQ 发消息的程序。
    * 中间即是 RabbitMQ,其中包括了 交换机 和 队列。 消息到交换机(exchange)的时候,交换机会转发到对应的队列中,那么究竟转发到哪个队列(queue),就要根据该路由键(code)
    * 右侧 C 代表 消费者,也就是往 RabbitMQ 拿消息的程序。
   Broker:简单来说就是消息队列服务器实体。
  Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  producer:消息生产者,就是投递消息的程序。
  consumer:消息消费者,就是接受消息的程序。
  channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

详细请查阅网上资源文档

1、配置pom包,主要是添加spring-boot-starter-amqp的支持


org.springframework.boot
spring-boot-starter-amqp

2、配置文件

配置rabbitmq的安装地址、端口以及账户信息

spring.application.name=spirng-boot-rabbitmq

spring.rabbitmq.host=192.168.0.86
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456

3、队列配置

@Configuration
public class RabbitConfig {

    @Bean
    public Queue Queue() {
        return new Queue("hello");
    }
}

3、发送者

rabbitTemplate是springboot 提供的默认实现

public class HelloSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "hello " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("hello", context);
    }
}

4、接收者

@Component @RabbitListener(queues = “hello”) public class
HelloReceiver {

@RabbitHandler
public void process(String hello) {
    System.out.println("Receiver  : " + hello);
} }

其他列子:一对多(多个订阅者),多对多模式

定时任务
1.pom包里面只需要引入springboot starter包即可。

org.springframework.boot
spring-boot-devtools
true

  1. 启动类上面加上@EnableScheduling即可开启定时

  2. 定时任务 每6秒执行一次

@Component
public class SchedulerTask {

    private int count=0;

    @Scheduled(cron="*/6 * * * * ?")
    private void process(){
        System.out.println("this is scheduler task runing  "+(count++));
    }
}
@Component
public class Scheduler2Task {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 6000)
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    } 
}

@Scheduled 参数可以接受两种定时的设置,一种是我们常用的cron=”/6 * * * ?”,一种是 fixedRate = 6000,两种都表示每隔六秒打印一下内容。
fixedRate 说明

* @Scheduled(fixedRate = 6000) :上一次开始执行时间点之后6秒再执行;

* @Scheduled(fixedDelay = 6000) :上一次执行完毕时间点之后6秒再执行;

@Scheduled(initialDelay=1000, fixedRate=6000) :第一次延迟1秒后执行,之后按fixedRate的规则每6秒执行一次。


邮件服务
1、pom包配置

pom包里面添加spring-boot-starter-mail包引用



org.springframework.boot
spring-boot-starter-mail

2、在application.properties中添加邮箱配置

spring.mail.host=smtp.qiye.163.com //邮箱服务器地址
[email protected] //用户名
spring.mail.password=xxyyooo //密码
spring.mail.default-encoding=UTF-8

[email protected] //以谁来发送邮件

3、编写mailService,这里只提出实现类。

@Component
public class MailServiceImpl implements MailService{

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender mailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);

        try {
            mailSender.send(message);
            logger.info("简单邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送简单邮件时发生异常!", e);
        }

你可能感兴趣的:(java)