SpringBoot的学习(一)

以下介绍的是SpringBoot的基本介绍和入门

一.为什么使用SpringBoot

1.可以创建独立运行的应用,而不需要依赖容器(不需要打war包)

2.提供maven极简配置,简化配置(可能引入不需要的jar),与主流框架集成

3.简化配置,不需要xml配置(注解代替xml),快速构建项目

4.提供相关可视化功能,方便监控

5.为微服务铺路


二.使用场景

1.有spring的地方

2.J2EE/WEB项目

3.微服务


三.入门注解

1.@Configuration:作用于类,标志这个类为配置类,这个类相当于spring的xml文件

2.@Bean:作用于Configuration注解类,相当于一个<bean>,需要把bean对象返回

3.@RestController:作用于类上,表示直接放回字符串或者json字符串(相当于Controller+Responsbody),方法就不需要在

Responsbody注解了

在service中,我们通过@Service注解交给spring管理

@Service
public class UserService {

    @Autowired // 注入Spring容器中的bean对象
    private UserDAO userDAO;

    public List<User> queryUserList() {
        // 调用userDAO中的方法进行查询,userDAO从spring容器中获取
        return this.userDAO.queryUserList();
    }

}

dao类不通过@Respository注解交给spring管理
public class UserDAO {   
    public List<User> queryUserList(){
        List<User> result = new ArrayList<User>();
        // 模拟数据库的查询
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUsername("username_" + i);
            user.setPassword("password_" + i);
            user.setAge(i + 1);
            result.add(user);
        }
        return result;
    }
而是用过下面的方式:
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "com.springboot.javaconfig") //配置扫描包
public class SpringConfig {
    
    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>,相当于交给spring管理
    public UserDAO getUserDAO(){
        return new UserDAO(); // 直接new对象做演示
    }    
}

测试类中
public class MainTest {  
    public static void main(String[] args) {
        // 通过Java配置来实例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);        
        // 在Spring容器中获取Bean对象
        UserService userService = context.getBean(UserService.class);
        // 调用对象中的方法
        List<User> list = userService.queryUserList();
        for (User user : list) {
            System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
        }
        
        // 销毁该容器
        context.destroy();
    }
}

四.读取外部配置文件

引入jar

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

项目打包后,资源文件全部在classpath目录下:

通过@PropertySouce注解,可以读取多个外部文件,如果配置文件不存在可以配置其他属性

@PropertySouce(value = {"classpath:jdbc.properties","classpath:redis.properties"},ignoreResouceNotFound=true)

例如:之前通过xml配置数据库连接池,现在通过注解来代替xml配置

	 <!-- 定义数据源 -->
	<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
		destroy-method="close">
		<!-- 数据库驱动 -->
		<property name="driverClass" value="${jdbc.driverClassName}" />
		<!-- 相应驱动的jdbcUrl -->
		<property name="jdbcUrl" value="${jdbc.url}" />
		<!-- 数据库的用户名 -->
		<property name="username" value="${jdbc.username}" />
		<!-- 数据库的密码 -->
		<property name="password" value="${jdbc.password}" />
		<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
		<property name="idleConnectionTestPeriod" value="60" />
		<!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
		<property name="idleMaxAge" value="30" />
		<!-- 每个分区最大的连接数 -->
		<!-- 
			判断依据:请求并发数
		 -->
		<property name="maxConnectionsPerPartition" value="100" />
		<!-- 每个分区最小的连接数 -->
		<property name="minConnectionsPerPartition" value="5" />
	</bean>
@Configuration
@ConfigurationProperties(profix:"com.pingan.resouce")//读取配置文件的key为com.pingan.resouce.jdbc.url =112334
@PropertySource(value = {"classpath:jdbc.properties"},ignoreResourceNotFound = true)
public class springConfig{

@Value("${jdbc.url}")
private String jdbcUrl;

@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;

@Value("${jdbc.username}")
private String jdbcUsername;

@Value("${jdbc.password}")
private String jdbcPassword;

@Bean(destroyMethod = "close")
public DataSource dataSource() {   //方法名dataSource相当于Bean的id
    BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
    // 数据库驱动
    boneCPDataSource.setDriverClass(jdbcDriverClassName);
    // 相应驱动的jdbcUrl
    boneCPDataSource.setJdbcUrl(jdbcUrl);
    // 数据库的用户名
    boneCPDataSource.setUsername(jdbcUsername);
    // 数据库的密码
    boneCPDataSource.setPassword(jdbcUsername);
    // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
    boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
    // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
    boneCPDataSource.setIdleMaxAgeInMinutes(30);
    // 每个分区最大的连接数
    boneCPDataSource.setMaxConnectionsPerPartition(100);
    // 每个分区最小的连接数    
    boneCPDataSource.setMinConnectionsPerPartition(5);
    return boneCPDataSource;
}
}

虽然项目中我们推荐用注解代替xml,但是可能因为某些特殊要求,我们必须使用xml,我们可以通过@ImportResouce来加载xml配置

@ImportResource(value = {"classpath:xxx-context.xml"})

五.springboot快速入门

创建springboot的方式1:使用http://start.spring.io,生成一个springboot类,这里不做介绍

直接使用工具创建,这里我是用的是STS,new →spring-start-project-service URL

打包方式:使用jar

父工程:spring-boot-start-parent

依赖:spring-boot-starter-web

插件:maven插件spring-boot-maven-plugin

入口类:AnhuiApplication为应用程序入口类,在com.pingan.anhui包下,其他项目必须在其子包内.

启动方式:运行AnhuiApplication的main方法,或者通过springboot的maven插件

全局配置文件:application.properties(或者application.yml)


pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.pingan</groupId>
	<artifactId>anhui</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>anhui</name>
	<description>Demo project for Spring Boot</description>
	<!--spring boot 父工程 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<!--spring boot 编码 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
	<!-- 	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
	-->            
	<!--spring boot web依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	<!--spring boot 测试相关-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<!--spring boot maven插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>



入口类

@SpringBootApplicationSpring Boot项目的核心注解,主要目的是开启自动配置。;

@SpringBootApplication
public class AnhuiApplication {

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

运行:2种方式运行

第一种:运行main方法:spring boot app (java application)

第二种:通过springboot的maven插件


springboot的核心

springboot项目的*Application入口类,入口类中main方法

@SpringBootApplication注解是springBoot的核心注解,也是个组合注解


其中

@SpringBootConfiguration也是组合注解,

@EnableAutoConfiguration表示启动自动配置,该注解会使springboot根据项目依赖的jar自动配置项目配置项,如我们添加spring-boot-starter-web的依赖,项目自动引入springMVC的依赖,并且自动配置tomcat和springMVC(核心Servlet等)

如果不需要springboot的自动配置,可设置自动排除,如排除redis的自动配置

            @EnableAutoConfiguration(exclude = {RedisAutoConfiguration.class})


@ComponentScan:默认扫描@SpringBootApplicaiton所在类的同级目录,以及他的子目录,所以一般我们其他包都是入口类的子包


在springboot项目中推荐使用springbootConfiguration代替Configuration


springboot全局配置文件:application.properties

    Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。

springboot项目中有默认的配置,如果需要修改我们可以在这个配置文件中设置去覆盖默认的配置

比如在application.properties中配置

server.port = 8088
server.servlet-path = *.html 配DispatcherServlet的规则为:*.html
server.context-path=/ssp #配置项目名字
server.session-timeout=60  session超时时间,默认30min 





猜你喜欢

转载自blog.csdn.net/weixin_37598682/article/details/80962959
今日推荐