• springboot使用入门


    Spring Boot 主要特征是:

    • 创建独立的spring应用程序

    • 直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)

    • 提供了固定化的“starter”配置,以简化构建配置

    • 尽可能的自动配置spring和第三方库

    • 提供产品级的功能,如:安全指标、运行状况监测和外部化配置等

    • 绝对不会生成代码,并且不需要XML配置

    1.创建maven工程,引入依赖

        <!-- 所有的springboot的工程都以spring父工程为父工程 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>

    2.引入SpringBoot提供的自动配置依赖

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

    3.添加引导类,并使用@SpringBootApplication注解

    @SpringBootApplication  // 相当于 EnableAutoConfiguration + ComponentScan + SpringbootConfiguration
    public class MySpringBootApplication {
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApplication.class, args);
        }
    }

    使用@SpringBootApplication 其实是一个组合注解,这里重点的注解有3个:

    • @SpringBootConfiguration: 声明当前类是一个配置类

    • @EnableAutoConfiguration: 开启自动配置

    • @ComponentScan:开启注解扫描

    4.java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:

    • @Configuration:声明一个类作为配置类,代替xml文件

    • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签

    • @Value:属性注入

    • @PropertySource:指定外部属性文件。

    5.引入druid依赖

    <dependency>
        <groupId>com.github.drtrang</groupId>
        <artifactId>druid-spring-boot2-starter</artifactId>
        <version>1.1.10</version>
    </dependency>

    6.添加jdbc.properties配置文件

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/springboottest
    jdbc.username=root
    jdbc.password=root

    7.创建JdbcConfiguration类

    @Configuration
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfiguration {
    
        @Value("${jdbc.url}")
        String url;
        @Value("${jdbc.driverClassName}")
        String driverClassName;
        @Value("${jdbc.username}")
        String username;
        @Value("${jdbc.password}")
        String password;
    
        @Bean
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(url);
            dataSource.setDriverClassName(driverClassName);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            return dataSource;
        }
    }
    解读:
    - @Configuration :声明 JdbcConfiguration 是一个配置类。
    - @PropertySource :指定属性文件的路径是: classpath:jdbc.properties 
    - 通过 @Value 为属性注入值。
    - 通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签
    
    然后就可以在任意位置通过 @Autowired 注入DataSource了!

    8。使用@Value注解可行,但是不够强大,因为它只能注入基本类型值。

    在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

    添加一个类专门用于属性注入,供其他类使用

     8.1新建JdbcProperties,用来进行属性注入:

    @ConfigurationProperties(prefix = "jdbc")
    public class JdbcProperties {
        private String driverClassName;
        private String url;
        private String username;
        private String password;
        //set和get方法
    }   
    • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类

    • prefix="jdbc"读取属性文件中,前缀为jdbc的值。

    • 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,并且必须具有getter和setter方法

    • 需要注意的是,这里我们并没有指定属性文件的地址,SpringBoot默认会读取文件名为application.properties的资源文件,所以我们把jdbc.properties名称改为application.properties

    8.2在JdbcConfiguration中使用这个属性:

    • 通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象

    • 然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:

    8.2.1 @Autowired注入

    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
    
        @Autowired
        private JdbcProperties jdbcProperties;
    
        @Bean
        public DataSource dataSource() {
    
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
            dataSource.setUrl(jdbcProperties.getUrl());
            dataSource.setUsername(jdbcProperties.getUsername());
            dataSource.setPassword(jdbcProperties.getPassword());
            return dataSource;
        }
    }

    8.2.2构造函数注入

    //    使用构造函数注解注入
    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
    
        private JdbcProperties jdbcProperties;
    
        public JdbcConfiguration(JdbcProperties jdbcProperties){
            this.jdbcProperties = jdbcProperties;
        }
    
        @Bean
        public DataSource dataSource() {
    
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
            dataSource.setUrl(jdbcProperties.getUrl());
            dataSource.setUsername(jdbcProperties.getUsername());
            dataSource.setPassword(jdbcProperties.getPassword());
            return dataSource;
        }
    }

    8.2.3@Bean方法的参数注入

    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
    
        @Bean
        public DataSource dataSource(JdbcProperties jdbcProperties) {
    
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
            dataSource.setUrl(jdbcProperties.getUrl());
            dataSource.setUsername(jdbcProperties.getUsername());
            dataSource.setPassword(jdbcProperties.getPassword());
            return dataSource;
        }
    }

    8.2.4直接在需要使用的地方声明

      如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需要的地方声明即可:

    @Configuration
    public class JdbcConfiguration {
        
        @Bean
        // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中
        @ConfigurationProperties(prefix = "jdbc")
        public DataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            return dataSource;
        }
    }
    我们直接把@ConfigurationProperties(prefix = "jdbc")声明在需要使用的@Bean的方法上,然后SpringBoot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属性的set方法!配置的和属性名要一致

    SpringBoot提供了默认配置。

    因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器,

    另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。

    后续不需要写jdbcConfiguration,

    9.添加连接池

    只需要在pom中找到springboot提供的启动器

    <!--jdbc的启动器,默认使用HikariCP连接池-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    指定连接池参数

    # 连接四大参数
    spring.datasource.url=jdbc:mysql://localhost:3306/springboottest
    spring.datasource.username=root
    spring.datasource.password=root
    # 可省略,SpringBoot自动推断
    spring.datasource.driverClassName=com.mysql.jdbc.Driver

    9.2也可以使用druid连接池

    <!-- Druid连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>

    在连接池属性上有些不同

    #初始化连接数
    spring.datasource.druid.initial-size=1
    #最小空闲连接
    spring.datasource.druid.min-idle=1
    #最大活动连接
    spring.datasource.druid.max-active=20
    #获取连接时测试是否可用
    spring.datasource.druid.test-on-borrow=true
    #监控页面启动
    spring.datasource.druid.stat-view-servlet.allow=true

    10.整合mybatis

    <!--mybatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>

    配置

    # mybatis 别名扫描
    mybatis.type-aliases-package=cn.test.pojo
    # mapper.xml文件位置,如果没有映射文件,请注释掉
    # mybatis.mapper-locations=classpath:mybatis/mappers/**/*.xml
    # 需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper注解,才能被识别。
    @Mapper
    public interface UserMapper {
    }

    10.通用mapper

    引入启动类

    <!-- 通用mapper -->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.0.2</version>
    </dependency>

    不需要做任何配置就可以使用了

    11.开启事务  SpringBoot中通过注解来控制。就是我们熟知的@Transactional

    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public User queryUserById(Long id){
            return this.userMapper.selectByPrimaryKey(id);
        }
        @Transactional
        public void  deleteUserById(Long id){
            this.userMapper.deleteByPrimaryKey(id);
        }
    }

    12在controller中添加

    @RestController
    @RequestMapping("User")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @GetMapping("{id}")
        @ResponseBody
        public User queryUserById(@PathVariable("id")Long id){
            return this.userService.queryUserById(id);
        }
    }

    测试就OK了

  • 相关阅读:
    【解决方案】流媒体协议RTSP视频平台EasyNVR远程监控系统在水利工程场景中的应用
    网络流媒体协议RTSP视频平台EasyNVR程序启动失败,端口被占用如何解决?
    视频监控联网RTSP平台EasyNVR用户管理权限与实际权限不匹配,该如何排查?
    流媒体协议RTSP视频平台EasyNVR录像回看列表删除提示日期错误,遇此问题该怎么解决?
    拉流失败,高清视频监控平台EasyNVR的RTSP摄像头被禁用怎么办?
    流媒体协议RTSP视频平台EasyNVR在windows下编译报错,该如何解决?
    如何解决RTSP协议视频平台EasyNVR智能云终端登录界面一直循环导致无法登录?
    RTSP视频平台EasyNVR如何设置防火墙允许程序运行端口的访问?
    【搭建方案】互联网电视如何通过EasyNVR视频平台传输直播视频流?
    RTSP视频平台EasyNVR录像版重启软件后服务崩溃问题排查解决
  • 原文地址:https://www.cnblogs.com/zxh06820/p/12641516.html
Copyright © 2020-2023  润新知