SpringBoot学习笔记

1、SpringBoot和SpringMVC的关系

  SpringBoot是SpringMVC的升级版,两者没有必然的联系

2、特点

  简化配置

  下一代框架

  入门级微框架

  微服务——SpringCloud——SpringBoot

  (添加Spring-Boot使用外部tomcat容器运行

    注意:Spring-Boot运行主要运行main()主函数

    如果需要在外部tomcat中运行Spring-Boot项目,只需要执行两步:

      1、排除内置容器(在pom.xml中加入下列代码)

        <!-- spring-boot web -->  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
            <!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework.boot</groupId>  
                    <artifactId>spring-boot-starter-tomcat</artifactId>  
                </exclusion>  
            </exclusions>  
               
        </dependency>

      2、在Spring-Boot入口实现SpringBootServletInitializer接口的configure方法

        /** 
         * 实现SpringBootServletInitializer可以让spring-boot项目在web容器中运行 
         */  
        @Override  
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
            builder.sources(this.getClass());  
            return super.configure(builder);  
        }     

    此时才可以正式导出成war到其他外部容器运行(注意:<packaging>war</packaging>中的包类型)

3、使用IDEA编写第一个项目

  首先确定maven、java版本要能保持一致

  ①、Create New Project

  

  

  ②、SpringBoot的各种组件————保持SpringBoot的version,以及选择其中的各种组件(小项目只需要勾选web--web)

  

  ③、填写项目保存路径,删除项目中的三个文件(第一次下载jar会很慢,推荐使用阿里云的maven镜像,去查询本地的setting文件)

  

  ④、查看pom.xml文件的配置

  

  ⑤、查看源码

  

  使用@SpringBootApplication注解通过jar包启动

  还可以实现configure()方法来使用war包启动项目

public class BaseApplication extends SpringBootServletInitializer {
    //部署到外部tomcat
    // 继承 SpringBootServletInitializer 类并实现 configure 方法,使用 config 的 sources 方法可以通过WAR启动项目
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder config) {
        return config.sources(BaseApplication.class);
    }

    // 在拥有 @SpringBootApplication 注解的类中,使用 SpringApplication 的 run 方法可以通过JAR启动项目
    public static void main(String[] args) {
        SpringApplication.run(BaseApplication.class, args);
    }
}

  ⑥、run上面的main方法,发现127.0.0.1:8080没有任何页面,所以需要新建Controller,使用@RestController注解

   

  重启之后,重新访问

  

  当然也可以使用命令行方式启动项目(具体操作去查询)

4、属性配置

  打开application.properties文件,配置简单的项目属性

  

  此时访问localhost:8081/springboot/springboot才能访问

  最好是使用.yml格式配置(不使用默认的properties文件)

  

  同时也可以把配置写到一个类中分组,避免在.yml文件中写入过多配置

  当需要使用配置文件中的属性时,可以使用@ConfigurationProperties注解绑定bean,对应的是配置文件中的"spring.datasource.druid.his"属性组,具体用法可以参考@ConfigurationProperties注解

    //  绑定注解,bena名称为hisDataSource
    @Primary
    @Bean(name = "hisDataSource")
    @ConfigurationProperties("spring.datasource.druid.his")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    //  使用@Qualifier注解调用创建的DataSource
    @Bean(name = "hisJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(
            @Qualifier("hisDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
    
    //  调用JdbcTemplate使用
    @Autowired
    @Qualifier("hisJdbcTemplate")
    private JdbcTemplate jdbcTemplate;

  用@Qualifier来自动装配注入,虽然可以使用@Autowired和@Resource来实现自动注入bean,但是加上@Qualifier描述更精细

@Qualifiel("Asion")
@Component
public  class  Asion{
}

//  调用
public class Controller{
    @Qualifiel("Asion")
    @Autowired
    private  Asion  asion;
}

 5、Controller注解使用

  

  

 

  重点讲解:

  @RestController是一个组合注解,等同于@ResponseBody配合@Controller返回json

  如果要从@RestController改为@Controller,则需要Spring官方的模板依赖(在pom.xml中配置)

  

  在Controller中返回页面路径(return  "index";)

 

  @RequestMapping(value = {"/hello", "/hi"}, method = RequestMethod.Get)  ——  集合路径

  

  @RequestParam(value = "id", required = false, defaultValue = "0")  ——  默认值

 

  @GetMapping(value = "/hello")  

  @PostMapping(value = "/hello")

 

 6、数据库——添加两个组件

  

  然后在配置文件中配置数据库驱动、数据库url、用户名、密码

   

  ddl-auto: create  表示每次运行程序都会创建一个空的表(最好是修改成update,第一次运行会创建表结构,但是如果有数据会保留下来

  show-sql:true  表示打印sql语句

  创建数据库,最后创建实体类,注解@Entity表示对应数据库中的表

  

  然后运行之后就可以看到数据库中已经新建好表及对应字段了

   实现:

  SpringBoot-Jpa操作数据库特别简单,不用写一句sql

  ①、新建一个接口,继承JpaRepository

    

  ②、Controller中@Autowired接口

    

   ③、使用其中自带的方法查询数据

   ④、如果自带的方法中没有满足查询条件的方法,可以在GirlRepository接口中扩展,需要注意的是,方法名称必须按照格式来写,才能查询

   

7、事务管理

  在Service中新建方法,同时插入两条数据,因为Spring的事务管理配置在Service层

 8、同时启动两个端口不同的相同Spring-Boot微服务项目(以IDEA为例子)

  ①、打开Edit Config

    

  ②、去掉Single instance only(单实例),确定

    

  ③、修改application.properties或者application.yml文件中的端口号(不重复)

    如果修改application.yml中端口不管用,默认一直使用8080端口启动,请查看自己的.yml文件中配置的格式,是否漏掉空格(":"后是有空格的)

  ④、启动run入口,即可访问两个地址

 

 

 

 

 

 

 

 

 

—————————————————————————————————————————————————————————————————————————————————

SpringMVC的数据绑定

1、绑定基本类型

  比如:int和Integer,最好使用Integer包装类型,可以不传值

2、绑定同属性的多对象

  使用@InitBinder注解方法,给对象指定前缀过滤

3、Json、XML数据绑定

  。。。。

4、SpringBoot的AOP切面编程

  默认SpringBoot的pom.xml中引入了aop依赖包

  @Aspect注解  // 定义切面

  例子:(自定义注解,SysLog系统日志)

    ①、创建自定义注解  @interface  参考另一文章

    ②、创建切面类

@Aspect
@Component
public class SysLogAspect {

    @Pointcut("@annotation(com.gtrj.common.annotation.SysLog)")
    public void logPointCut() {

    }

    @Before("logPointCut()")
    public void beforeAdviceAnnotation(){
        System.out.println("- - - - - 前置通知 annotation - - - - -");
    }
    
    @Around("annotation(SysLog)")
    public Object around(ProceedingJoinPoint point , SysLog syslog) throws Throwable {
        System.out.println("- - - - - 环绕通知 annotation - - - -");
        //获取注解里的值
        System.out.println("注解的值:" + syslog.value());
        try {//obj之前可以写目标方法执行前的逻辑
            Object obj = proceedingJoinPoint.proceed();//调用执行目标方法
            System.out.println("- - - - - 环绕通知 annotation end - - - -");
            return obj;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return null;

    }
}    

    ③、根据自定义注解的范围使用注解,赋值,即可执行此方法(可在执行完成后存储值到数据库)

posted @ 2018-02-26 11:47  想名字头痛  阅读(209)  评论(0编辑  收藏  举报