Spring Boot

简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。Boot在开发中实现免XML配置效果,使得程序员精力集中在编码实现上,可以快速构建Spring应用。
Spring Boot不是提供一种新的解决方案,是在Spring框架基础之上实现快速开发应用。

Spring Boot主要内容(一律采用Java注解配置):
- Spring Boot Beans和参数注入(IOC)
- Spring Boot 数据访问
- Spring Boot WebMVC
- Spring Boot AOP/事务
- Spring Boot Servlet应用

Spring Cloud使用
- 服务注册
- 服务发现
- 服务调用

搭建Spring Boot开发环境

  1. 导入boot jar开发包

    基础包:spring-boot-starter-parent

  2. 添加boot 配置文件application.properties

    spring.datasource.username=ZXH
    spring.datasource.password=123456  
    

    或application.yml

    spring:
        datasource:
            username: ZXH
            password: 123456
    
    1. 创建spring boot项目

      • 使用start.spring.io网址创建maven project,然后导入eclipse

      • 使用eclipse创建maven project,然后在pom.xml中添加jar包,追加application.properties

        <!--  boot基础包,指定了版本后,其他boot包可以省略版本号 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.2.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        
        <!-- 定义jdk版本和源码文件和编译后文件的编码 -->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.7</java.version>
        </properties>
        
        <dependencies>
            <!-- 核心自动配置,也就是ioc -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <!-- boot和junit集合的测试类 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        

编写一个入门示例

1.### Hello入门示例(JSON响应)

- 在pom.xml引入一个spring-boot-starter-web开发包

        <!-- Spring Boot WebMVC支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

- 在src/main/java中编写HelloController,使用@RestController+@RequestMapping

        @RestController
        public class HelloController {

            @RequestMapping("/hello")
            public String home(){
                return "hello";
            }
        }

- 启动SpringbootApplication.java程序入口

- 打开浏览器访问http://localhost:8080/hello
- 如果需要修改默认8080端口号,可以在application.properties中添加

        server.port=8888
  1. 上面示例使用注意事项

    • pom.xml配置中使用< scope>

      指定jar包在什么情况下有效,默认compile表示编译、运行、测试、打包都有效;test表示只有运行测试类有效(junit类)

    • 启动类SpringApplication.run()方法

      参数需要使用当前类名做参数(带有@SpringBootApplication标记的类名)。

    • Controller类要放在启动类包中或子包中才能有效扫描

  2. Hello入门示例(JSP响应)

    • 在pom.xml引入JSP支持的jar包

      <dependency>  
          <groupId>org.apache.tomcat.embed</groupId>  
          <artifactId>tomcat-embed-jasper</artifactId>    
      </dependency>   
      
    • 在application.properties配置文件指定jsp位置

      spring.mvc.view.prefix=/
      spring.mvc.view.suffix=.jsp
      
    • 编写Controller,使用@Controller+@RequestMapping

      @Controller//jsp响应
      public class JspController {
      
          @RequestMapping("/jsp")
          public String execute(ModelMap model){
              model.put("msg", "你好,Spring Boot");
              return "home";//调用/home.jsp
          }
      
      }
      

Spring Boot beans和参数注入(IOC)

常用标记

- @Configuration+@Bean
- @ComponentScan
- @EnableAutoConfiguration
- @SpringBootApplication
  1. @Configuration+@Bean

    Spring原有XML配置

    <beans>
        <bean id="dbcp" class="..BasicDataSource">
    </beans>
    

    @Configuration等价于< beans>作用;@Bean等价于< bean>

    注解替代方式

    @Configuration//<beans>
    public class BeanFactory {
    
        //<bean id="dbcp" class="...MyDataSource">
    //  @Bean //默认约定是方法名做id值createDataSource
        @Bean(name="dbcp")
        public MyDataSource createDataSource(){
            return new MyDataSource();
        }
    
        @Bean
        public User createUser(){
            User user = new User();
            user.setId(10);
            user.setName("SpringBoot");
            return user;
        }
    
    }
    

    创建Spring容器获取bean对象

    public static void main(String[] args){
        //创建Spring容器对象
        ApplicationContext ac = 
            new AnnotationConfigApplicationContext(BeanFactory.class);
        MyDataSource ds = ac.getBean("dbcp",MyDataSource.class);
        System.out.println(ds);
        ds.getConnection();
        //取user
        User user = ac.getBean("createUser",User.class);
        System.out.println(user.getId()+" "+user.getName());
    }
    
  2. @ComponentScan

    开启组件扫描,等价于XML中,扫描包下组件,发现@Controller、@Service、@Repository、@Component会将组件纳入Spring容器创建对象

    @ComponentScan(basePackages={“xxx”,”xxx”})

    示例:

    //<context:component-scan basePackage="xyz.ahong.dao"/>
    @ComponentScan(basePackages={"xyz.ahong.dao"})
    

    UserDao组件在cn.xdl.dao包下

    @Repository//默认约定是类名首字母小写userDao
    public class UserDao {
    
        @Resource
        private MyDataSource dataSource;
    
        public void findUser(){
            System.out.println(dataSource+"查询User信息");
        }
    
    }
    
  3. @EnableAutoConfiguration

    从Spring3开始为了摆脱XML配置,提供一系列的@Enablexxx注解,例如EnableConfigProperties、EnableWebMVC、EnableTrantactionManager等等
    利用那些Enable注解替代原来Spring XML配置文件中的、等定义。

    @EnableAutoConfiguration标记包含了所有EnableXxx注解标记,追加了该标记等价于把所有EnableXxx注解功能打开。

    @EnableAutoConfiguration标记内部使用SpringFactoriesLoader组件加载了所有jar包中的”META-INF/spring.factories”文件中定义的组件。

    在spring-boot-autoconfigure-1.4.2.RELEASE.jar包下的spring.factories包含以下组件,可以开启的自动配置功能如下:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
    org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration
    org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
    org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration
    org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
    org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration
    org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration
    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
    org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration
    org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration
    ... ...省略
    
  4. @SpringBootApplication

    @SpringBootApplication标记包含@Configuration、@ComponentScan和@EncableAutoConfiguration。
    写一个等价于写上述3个。

  5. @EnableConfigurationProperties和@ConfigurationProperties

    @EnableConfigurationProperties属于自动装配功能之一,包含在@EncableAutoConfiguration中。

    作用是可以将application.properties信息注入到实体对象属性中。

    @ConfigurationProperties需要使用@EnableConfigurationProperties

    使用方法请看下面案例:

    application.properties代码如下:

    db.mysql.username=root
    db.mysql.password=123456
    db.oracle.username=ZXH
    db.oracle.password=123456
    

    DbConfig实体对象类结构如下:

    @Component
    @ConfigurationProperties(prefix="db.oracle")
    public class DbConfig {
    
        private String username;//获取application.properties中prefix.username值
    
        private String password;
    
        @Value("${db.username}")
        private String user;//将db.username=xdl信息给user属性
    
        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;
        }
    
    
    }
    

    创建Spring容器对象,获取dbConfig对象测试

    ApplicationContext ac = SpringApplication.run(BeanFactory.class);
    DbConfig dbconfig = ac.getBean("dbConfig",DbConfig.class);
    System.out.println(dbconfig.getUsername()+" "+dbconfig.getPassword());
    

    注意:自动装配属于boot功能,AnnotationConfigApplicationContext创建Spring容器对象不支持此功能。

  6. Spring Boot测试

    和junit4集合,启动时创建Spring容器,然后将测试类对象和原有的Bean对象结合在一起,最后可以将Bean对象给测试属性注入.

    @RunWith(SpringRunner.class)//@Runwith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes={BeanFactory.class})//@ContextConfiguration(locations={"spring-mvc.xml"})
    public class TestBootJunit {
    
        @Resource
        private MyDataSource ds;
    
        @Test
        public void test1(){
            //测试代码
            System.out.println(ds);
            ds.getConnection();
        }
    
    }
    
  7. springboot应用程序结构建议

    包名要有层次,一般采用域名反写做根。带有@SpringBootApplication注解的入口类放在根位置。

综合案例

  1. 创建MyDataSource对象,管理连接

    • 引入spring boot基本环境(jar包)

      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>1.4.2.RELEASE</version>
          <relativePath/> 
      </parent>
      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
          <java.version>1.7</java.version>
      </properties>
      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter</artifactId>
          </dependency>
          <!-- 追加oracle驱动包 -->
          <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
          </dependency>
      
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
          </dependency>
      
      </dependencies> 
      
    • src/main/resources添加application.properties配置文件

      mydb.username=ZXH
      mydb.password=123456
      mydb.url=jdbc:oracle:thin:@localhost:1521/XE
      mydb.driverClassName=oracle.jdbc.OracleDriver
      
    • 定义MyDataSource组件,注入properties信息

      @ConfigurationProperties(prefix="mydb")
      public class MyDataSource {
      
      
          //将mydb.username值注入
          private String username;//对应application.properties中的key
          private String password;
          @Value("${mydb.driverClassName}")
          private String driver;
          private String url;
          //省略getter和setter方法
      
          public Connection getConnection(){
              try{
                  Class.forName(driver);
                  System.out.println("创建一个Connection连接");
                  Connection con = DriverManager.getConnection(url,username,password);
                  return con;
              }catch(Exception e){
                  e.printStackTrace();
                  return null;
              }
          }
      }
      
    • 定义cn.xdl.jdboot包,定义一个主入口类

      @SpringBootApplication
      public class BootApplication {
      
          @Bean
          public MyDataSource createMyDataSource(){
              return new MyDataSource();
          }
      }
      
    • 编写测试类

      @RunWith(SpringRunner.class)//启动
      @SpringBootTest(classes={BootApplication.class})//创建spring容器实例化
      public class TestDataSource {
      
          @Resource
          private MyDataSource myds;
      
          @Test
          public void test1() throws SQLException{
              System.out.println(myds);
              Connection con = myds.getConnection();
              System.out.println(con);
              con.close();
          }
      }
      
  2. 创建c3p0连接池对象,管理连接

    • 在pom.xml中追加c3p0驱动包

      <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
      </dependency>
      
    • 在application.properties追加连接参数定义
      (user、password、jdbcUrl、driverClass使用的是c3p0连接池组件的属性名)

      c3p0.user=ZXH
      c3p0.password=123456
      c3p0.jdbcUrl=jdbc:oracle:thin:@localhost:1521/XE
      c3p0.driverClass=oracle.jdbc.OracleDriver
      
    • 在BootApplication中创建c3p0连接池对象,自动注入properties连接参数

      @Bean
      @ConfigurationProperties(prefix="c3p0")
      public DataSource createC3p0DataSource(){
          ComboPooledDataSource dataSource = new ComboPooledDataSource();
          //不需要手工设置连接参数,
          //会自动调用set注入application.properties中"c3p0.属性名"的值
          return dataSource;
      }
      
    • 测试c3p0连接池

      @RunWith(SpringRunner.class)//启动
      @SpringBootTest(classes={BootApplication.class})//创建spring容器实例化
      public class TestDataSource {
      
          @Resource
          private DataSource c3p0ds;
      
          @Test
          public void test2() throws SQLException{
              Connection con = c3p0ds.getConnection();
              System.out.println(con);
              con.close();
          }
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值