Spring学习笔记

Spring简介

  • Spring Boot 构建
  • Spring Cloud 协调
  • Spring Cloud Data Flow 连接

Spring Framework

用于构建企业级应用的轻量级一站式解决方案
  1. 设计理念
  2. 力争让选择无处不在
  3. 体现海纳百川的精神
  4. 保持向后的兼容性
  5. 专注API设计
  6. 追求严苛的代码质量

Spring Framework架构图

Spring Boot

快速构建基于Spring的应用程序
  1. 快、很快、非常快
  2. 尽可开箱即用,退可按需改动
  3. 提供各种非功能特性
  4. 不用生成代码,没有XML配置

Spring Boot架构图

Spring Cloud

简化分布式系统的开发
  1. 配置管理
  2. 服务注册与发现
  3. 熔断
  4. 服务追踪

Spring Cloud架构图

Hello Spring

  1. 通过Spring Initializr生成骨架(https://start.spring.io/)
  2. 编写第一段代码
  3. 运行你的程序
  4. 分析项目结构

通过Spring Initializr生成Spring骨架

我们使用IDE工具打开下载的代码,我们可以看到Spring的骨架结构如下:

SpringBoot骨架结构

接下来我们编写我们的第一个Spring页面,我们为了方便直接修改入口文件(HelloSpringApplication)中的代码来实现,下面为修改后的代码:

package com.Spring.hello.hellospring;

		import org.springframework.boot.SpringApplication;
		import org.springframework.boot.autoconfigure.SpringBootApplication;
		import org.springframework.web.bind.annotation.RequestMapping;
		import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
//增加RestController注解
@RestController
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args);
	}
	//Hello页面
	@RequestMapping("/hello")
	public String Hello(){
		return "Hello Spring";
	}
}

然后运行项目就可以看见第一个SpringBoot项目了!

在这里插入图片描述

我们在构建项目的时候添加了Actuator所以,访问URL/actuator/health可以查看项目的运行状态,“up”为正常。

在这里插入图片描述

如何配置单数据源

  1. 我们生成一个如下配置的Spring框架
  2. 引入对应的数据库驱动–H2
  3. 引入JDBC依赖–Spring-book-starter-jdbc
  4. 获取DataSource Bean,打印信息或者通过/acturator/beans查看Bean(必须引入Acturator)

在这里插入图片描述

package com.Spring.data.springdata;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@RestController
public class SpringDataApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringDataApplication.class, args);
	}
	
	private void showConnection() throws SQLException{
		log.info(dataSource.toString());
		Connestion conn = dataSource.getConnection();
		log.info(conn.toString());
		conn.close();
	}
}

不使用Spring的JDBC的配置(直接配置所需要的Bean)

数据源相关

DataSoure(根据选择的连接池实现决定)

事物相关(可选)

PlatformTransactionManager(DataSourceTransactionManager)
Transaction Template

操作相关(可选)

Jdbc Template

@Configuration
@EnableTransactionManagemeent
public class DataSourceDemo{
	@Autowired
	private DataSource dataSource;

	public sraric void main(String[] args) throws SQLException{
		ApplicationContext applicationcontext = new CLassPathXmlApplicationContext("applicationcontext*.xml");
		showBeans(applicationContext);
		dataSourceDemo(applicationcontext);
	}
	@Bean(destrouMethod = "close")
	public DataSource dataSource() throws Exception{
		Properties properties = new Properties();
		Properties.setProperty("driverClassName","org.h2.Driver");
		Properties.setProperty("url","jdbc:h2:mem:textdb");
		Properties.setProperty("username","sa");
		return BasicDataSourceFactory.createDataSource(properties);
	}
	@Bean
	pulic PlatformTransactionManager transactionManager() throws Exception{
	return new DataSourceTransactionManager(dataSource());
	}
}

Spring Boot 都为我们做了哪些配置

DataSourceAutoConfiguration

配置DataSource

DataSourceTransactionManagerAutoConfiguration

配置DataSourceTransactionManager

Jdbc TemplateAutoConfiguration

配置Jdbc Template
如果自己配置了就不会再配置了

数据源相关配置属性

通用

spring.datasource.url = jdbc:mysql://localhost/text
spring.datasource.username = dbuser
spring.datasource.password = dbpaw
spring.datasource.driver-class-name = com.mysql.jdbc.Driver(可选)

初始化内嵌数据库

spring.datasource.initialization-mode = embeddedj|always|never
spring.datasource.schema与spring.datasource.data确定初始化SQL文件
spring.datasource.platform = hsqldb | h2 | oracle | mysql | postgresql (与前者对应)

多数据源配置

注意事项
不同数据源的配置要分开
关注每次使用的数据源

有多个DataSource时系统如何判断
对应的设施(事物、ORM等)如何选择DataSource

Spring Boot中的多数据源配置
手工配置两组 DataSource 及相关内容
与Spring Boot协同工作(二选一)

配置@Primary类型的Bean
排除SpringBoot的自动配置
DataSourceAutoConfiguration
DataSourceTransactionManagerAutoConfiguration
Jdbc TemplateAutoConfiguration

@SringBootApplication(exclude = { DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class,JdbcTemplateAutoConfiguration.class})
@Slf4j
public class MyltiDataSOurceDemoApplication{
	@Bean
	@configurationPropertes("fooDataSourceProgerties()")
	public DataSourceProperties fooDataSourceProperties(){
		return new DataSourcePerties();
	}
	
	@Bean
	public DataSource fooDataSource(){
		DataSourceProperties dataSourceProperties = fooDataSourceProperties();
		log.info("foo datasource: {}",dataSourceProperties.getUrl());
		return dataSourceProperties.initializeDataSourceBuilder().build();
	}
	
	@Bean
	@Resource
	public PlatformTransactionManager fooTxManager(DataSource fooDataSource){
		return new DataSourceTransactionManager(fooDataSource);
	}
	@Bean
	@ConfigurationProperties("bar.datasource")
	public DataSourceProperties barDataSourceProperties(){
		return new DataSourceProperties();	
	}
	@Bean
	public DataSource barBataSource(){
		DataSourcePorperties datasourceporprties = barDataSourceProperties();
		log.info("bar datasource:{}",dataSourceProperties.getUrl());
		return dataSourceProperties.initializeDataSourceBuilder().build();
	}
	@Bean
	public PlatformTransactionManager barTxManager(DataSource barDataSource){
		return new DataSourceTransactionManager(barDataSource);
	}
}

连接池HikariCP

在Spring Boot中配置HikariCP
Spring Boot 2.X

默认使用HikariCP
配置 spring.datasource.hikari.*

Spring Boot 1.X

默认使用Tomcat连接池,需要移除tomcat-jdbc依赖
spring.datasource.type = com.zaxxer.hikari.HikariDataSource

常用的HikariCP配置参数

常用配置参数

spring.datasource.hikari.maximumPoolSize = 10
spring.datasource.hikari.minimumldle = 10
spring.datasource.hikari.idleTimeout = 600000
spring.datasource.hikari.connectionTimeout = 30000
spring.datasource.hikari.maxLifetime = 1800000
详细文档见官网

Alibaba Druid

  1. 详细的监控
  2. ExceptionSorter,针对主流数据库的返回码都有支持
  3. SQL防注入
  4. 内置加密配置
  5. 众多扩展点,方便定制
    官网(中文)
数据源配置
直接配置DruidDataSource
通过druid-spring-boot-starter

spring.datasource.druid.*

常见配置

spring.output.ansi.enablerd = ALWAYS
spring.datasource.druid.url = jdbc:h2:mem:foo
spring.datasource.druid.username =
spring.datasource.druid.password =
spring.datasource.druid.initial-size = 5
spring.datasource.druid.max-active = 5
spring.datasource.druid.min-idle = 5
spring.datasource.druid.filters = conn,config,stat,slf4j
spring.datasource.druid.connection-properties = config.decrypt = true;config.decrypt.key = ${public-key}
spring.datasource.druid.test-on-borrow = true
spring.datasource.druid.test-on-return = true
spring.datasource.druid.test-while-idle =true

Filter配置

spring.datasource.druid.filters = stat,config,wall,log4j

密码加密

spring.datasource.password = <加密密码>
spring.datasource.druid.filter.config.enabled = true
spring.datasource.druid.connection-properties = config.decrypt = true;config.decrypt.key =

SQL防注入

spring.datasource.druid.filter.wall.enabled = true
spring.datasource.druid.filter.wall.db-type = h2
spring.datasource.druid.filter.wall.config.delete-allow = false
spring.datasource.druid.filter.wall.config.drop-table-allow = false

Druid Filter

用于定制连接池操作的各种环节
可以继承FilterEventAdapter以方便的实现Filter
修改META-INF/druid-filter.properties增加Filter配置

@Slf4j
public class ConnectionLogFilter extends FillterEventAdapter{
	@Override
	public void connection_connectBefore(FilterChain chain,Properties info){
	log.info("BEFORE CONNECTION!")
	}
	
	@Override
	public void connection_connectAfter(ConnectionProxy connection){
	log.info("AFTER CONNECTION!")
	}
}
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的开发方式,通过依赖注入和面向切面编程等特性,简化了Java应用程序的开发过程。 以下是关于Spring学习的一些笔记: 1. IoC(控制反转):Spring通过IoC容器管理对象的创建和依赖关系的注入。通过配置文件或注解,将对象的创建和依赖关系的维护交给Spring容器来管理,降低了组件之间的耦合度。 2. DI(依赖注入):Spring通过依赖注入将对象之间的依赖关系解耦。通过构造函数、Setter方法或注解,将依赖的对象注入到目标对象中,使得对象之间的关系更加灵活和可维护。 3. AOP(面向切面编程):Spring提供了AOP的支持,可以将与业务逻辑无关的横切关注点(如日志、事务管理等)从业务逻辑中分离出来,提高了代码的可重用性和可维护性。 4. MVC(模型-视图-控制器):Spring提供了一个MVC框架,用于构建Web应用程序。通过DispatcherServlet、Controller、ViewResolver等组件,实现了请求的分发和处理,将业务逻辑和视图展示进行了分离。 5. JDBC和ORM支持:Spring提供了对JDBC和ORM框架(如Hibernate、MyBatis)的集成支持,简化了数据库访问的操作,提高了开发效率。 6. 事务管理:Spring提供了对事务的支持,通过声明式事务管理和编程式事务管理,实现了对数据库事务的控制和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值