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框架的学习教程和笔记 #### Spring框架的核心概念与组件介绍 Spring是一个分层架构,通过使用基本的Java Bean来完成以前只有EJB才能实现的功能。它提供了对面向切面编程的支持,允许用户定义方法拦截器,在特定的方法调用前后执行通知逻辑[^1]。 #### Web开发中的Spring应用实例 对于Web应用程序而言,`spring-web-5.3.24.jar` 和 `spring-webmvc-5.3.24.jar` 是必不可少的部分。前者提供了一个全面的、易于使用的HTTP请求处理机制;后者则实现了MVC设计模式下的控制器接口,使得开发者可以更方便地构建动态网站。 #### 使用Maven搭建Spring项目实践指南 当采用Maven作为项目的构建工具时,可以通过编辑POM文件快速引入所需的库文件。例如,为了开启web场景支持,只需简单添加如下依赖项即可: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 这段XML片段会自动下载并配置好所有必要的jar包,从而简化了环境设置过程[^3]。 #### 配置服务发现与外部化配置管理方案 针对分布式系统的复杂需求,还可以考虑集成Consul来进行服务注册和服务发现工作,并利用Bootstrap上下文提前加载全局共享属性。这通常涉及到向pom.xml中追加额外的服务端点连接信息: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> ``` 上述代码段有助于提高微服务体系结构下各节点之间的协作效率[^4]。 #### 数据验证功能的具体实施方式 最后,在实际编码过程中如果遇到表单提交等涉及输入合法性判断的情况,则可借助Hibernate Validator API轻松搞定。创建一个名为ValidationConfig.java的新类用于初始化默认校验工厂对象LocalValidatorFactoryBean: ```java @Configuration @ComponentScan("com.atguigu.spring6.validation.method2") public class ValidationConfig { @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } } ``` 此段程序展示了如何自定义配置以增强业务逻辑层面的数据完整性保护措施[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值