spring-boot搭建web项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kpp19920121/article/details/80957552

spring boot简介

      spring项目在企业级的开发中的地位日趋重要。基本上在很大程度上替代了ejb框架,可插拔性、事物管理更是相当优秀。但是spring的配置比较繁琐。需要我们单独的配置事物,单独的配置web环境。配置在不同的环境下,可能会出错。spring-boot应运而生。spring-boot将以前spring项目的繁琐的配置简化了,基本上可以实现零配置。并且可以将tomcat嵌入到spring中,可以将项目打成一个可运行的jar,也可以打成一个war包。大大的简化了java开发者们工作,使我们可以侧重的关注业务。本片博客,旨在搭建框架,不会侧重的讲spring-boot的原理或者好处。

  spring-boot是什么?

      spring的目的是提供一组工具,来帮助我们快速的构建基于spring的应用程序。项目构建完成以后,可以通过运行普通的jar文件一样运行spring项目(spring内嵌web容器)。

  spring-boot怎么使用

    1. starter
      starter是spring中的一个很重要的组成部分。没有使用spring-boot以前,假如我们使用maven构建项目,需要在pom文件中配置大量的依赖项有了starter之后,只需要引入对应的starter,依赖项都被引入了,下面是一些重要的starter:
      spring-boot-starter-parent:定义了一些依赖项的版本,可以适当的进行扩展

      spring-boot-starter-web:构建基于springmvc的RESTful Web项目,

      spring-boot-starter-jdbc:构建连接池服务默认基于tomcat连接池实现,

      spring-boot-starter-log4j:构建spring中的日志组件,默认基于log4j和slflog4j,

      mybatis-spring-boot-starter:构建mybatis作为持久层的项目,注意和spring的版本相对应

      其他的参展spring-boot的官方文档

    2. 自动配置
      spring-boot的项目官方推荐都需要有一个应用程序的入口类,在这个类中可以设置是否开启spring的默认配置。推荐的项目结构为:

      •@EnableAutoConfiguration
          在程序的入口类上添加,spring-boot根据classpath中的类路径中的jar依赖,为当前项目进行自动配置。比如jar包中有hsqldb.jar,项目中又没有配置任何数据源,则spring会为项目配置一个基于hsqldb的内存数据库。

      •@ComponentScan
          在程序的入口类上添加,这个类就不用赘述了,使用过spring的都知道项目会配置ioc容器的扫描路径。会自动注册扫描路径中的@Component, @Service, @Repository, @Controller注解。

      •@Configuration
          允许在上下文中注册额外的bean或导入其他配置类

      •@SpringBootApplication
          这是一个组合注解,加了这个注解之后,相当与入口类同时有了@EnableAutoConfiguration、@ComponentScan、@Configuration等注解的功能

    3. 核心api
      

      •Application.java
          程序的入口类,通常要提供main方法,一个project通常只需要一个入口类。main方法中需要调用SpringApplication.run(),main方法中需要调用SpringApplication类启动spring运行环境的上下文。比如根据自动配置,初始化ioc和aop等信息。

      •SpringApplication.java
          
SpringApplication可以作用在入口程序的main方法中,使用我们能够在main方法中初始化spring的上下文(IOC AOP)

      •SpringBootServletInitializer.java
          
如果我们不需要将程序打成jar,而是打成war包的时候,这个类将会用到。通常是入口类需要继承这个抽象类。并且重写configure()方法。这个类的作用主要起到模拟web.xml的作用。使用到了这个类,我们就不需要在web.xml中配置初始化spring 的filter和servlet了。

      

搭建spring-boot运行的项目

  项目搭建环境说明


      项目中搭建的环境为:
        spring-boot-starter-parent:1.5.14.RELEASE
        spring-boot-starter-log4j:1.3.8.RELEASE
        mybatis-spring-boot-starter:1.3.0
        druid(连接池):1.1.10
        springloaded.(热部署):1.2.0.RELEASE

  maven运行环境的配置

      maven远程仓库可能会因为网络的问题,导致一下依赖下载失败,出现一些莫名的错误。我们会配置aliyun的maven镜像。
      修改%MAVEN_HOME%/conf/settings.xml,修改:

<mirror>  
        <id>nexus-aliyun</id>  
        <mirrorOf>*</mirrorOf>  
        <name>Nexus aliyun</name>  
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
  </mirror>


  pom文件的编写

    1)项目版本配置

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <spring-boot-starter-log4j.version>1.3.8.RELEASE</spring-boot-starter-log4j.version>
        <mybatis-spring-boot-starter.version>1.3.0</mybatis-spring-boot-starter.version>
        <druid.version>1.1.10</druid.version>
        <springloaded.version>1.2.0.RELEASE</springloaded.version>
    </properties>

    2)配置spring-boot-starter-parent

      可以理解为spring-boot-starter-parent定义了一大堆的依赖版本,在下面dependency引用的时候,不需要再制定version了。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.14.RELEASE</version>
    </parent>

    3)配置spring-boot-starter

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

    4)配置项目的日志为log4j

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>${spring-boot-starter-log4j.version}</version>
        </dependency>

    5)配置spring-boot-starter-tomcat

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

    6)配置mybaits和数据源信息

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot-starter.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

    7)配置spring-boot打包插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>${springloaded.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

  配置文件清单

    application.properties配置

spring.datasource.type=com.isoftstone.spring_boot_helloworld.plat.datasource.DruidDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://192.168.233.134:3306/test?autoReconnect=true&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.druid.maxActive=20

    log4j配置

# Output pattern : date [thread] priority category - message   FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 
log4j.rootLogger=ERROR, Console, RollingFile

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c{5}] - %m%n

#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=../logs/aligns.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#log4j.logger.java.sql=DEBUG

#Springframework level
#log4j.logger.org.springframework=ERROR

#Hibernate level
#log4j.logger.org.hibernate=ERROR
#log4j.logger.org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory=ERROR
#log4j.logger.org.hibernate.search.impl.ConfigContext=ERROR
#log4j.logger.net.sf.ehcache.config.CacheConfiguration=ERROR

#Project defalult level
#log4j.logger.org.activiti.engine.impl.persistence=DEBUG
#log4j.logger.org.apache.shiro=DEBUG
log4j.logger.org.springframework=WARN
log4j.logger.org.springframework.scheduling.quartz=ERROR
#print SQL begin
log4j.logger.com.ibatis=DEBUG
log4j.logger.core.security.shiro.session.CacheSessionDAO=ERROR
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#print SQL end

  java代码清单

    编写项目的入口类Application.java

package com.isoftstone.spring_boot_helloworld;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
@MapperScan("com.isoftstone.spring_boot_helloworld.user.mapper")
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

    自定义数据源DruidDataSource

package com.isoftstone.spring_boot_helloworld.plat.datasource;

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;

@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSource extends com.alibaba.druid.pool.DruidDataSource {
    private static final long serialVersionUID = 1L;

    @Bean
    @Primary
    public DataSource dataSource() {
        return new DruidDataSource();
    }

}

    编写controller

package com.isoftstone.spring_boot_helloworld.app.user.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.isoftstone.spring_boot_helloworld.app.user.bean.User;
import com.isoftstone.spring_boot_helloworld.app.user.service.UserService;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping
    public List<User> index() {
        return userService.findList(new User());
    }

    @RequestMapping("/user/add")
    public String addUser() {
        User user = new User();
        user.setId(2);
        user.setName("李四");
        this.userService.addUser(user);
        return "添加用户成功!";
    }

}

    service接口

package com.isoftstone.spring_boot_helloworld.app.user.service;


import java.util.List;

import com.isoftstone.spring_boot_helloworld.app.user.bean.User;

public interface UserService {

    public void addUser(User user);

    public List<User> findList(User user);

}

    service实现类

package com.isoftstone.spring_boot_helloworld.app.user.service.impl;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.isoftstone.spring_boot_helloworld.app.user.bean.User;
import com.isoftstone.spring_boot_helloworld.app.user.mapper.UserMapper;
import com.isoftstone.spring_boot_helloworld.app.user.service.UserService;

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    @Transactional
    public void addUser(User user) {
        userMapper.addUser(user);
    }

    @Override
    public List<User> findList(User user) {
        return userMapper.findList(user);
    }

}

    编写mapper

package com.isoftstone.spring_boot_helloworld.app.user.mapper;


import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.isoftstone.spring_boot_helloworld.app.user.bean.User;
@Mapper
public interface UserMapper {

    @Insert("insert into sys_user(id,name) values(#{id},#{name})")
    public void addUser(User user);



    @Select("select * from sys_user ")
    public List<User> findList(User user);
}

  打包运行

      
直接可以将项目不到到tomcat中,跟部署普通的spring mvc war项目一样

  项目下载地址

点击这里进行下载

猜你喜欢

转载自blog.csdn.net/kpp19920121/article/details/80957552