spring-boot搭建web项目

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
    

    spring.mvc.static-path-pattern=/resources/**
    spring.resources.static-locations=/resources/
注:
  spring-boot中静态资源的处理配置需要注意,
   spring.mvc.static-path-pattern匹配的是静态资源访问的规则(css、js、image)
   sspring.resources.static-locations是静态资源的路径,相对于项目的contextPath
    spring-boot默认spring.mvc.static-path-pattern=/**,
   spring.resources.static-locations是在classpath下。感兴趣的可以参考
[spring-boot官方文档](https://docs.spring.io/spring-boot/docs/1.5.14.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content)

    log4j配置


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项目一样

  项目下载地址

点击这里进行下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值