添加链接
注册
登录
link之家
链接快照平台
输入网页链接,自动生成快照
标签化管理网页链接
相关文章推荐
冲动的凉茶
·
在jquery项目中怎样设置全局变量 - ...
·
2 月前
·
英俊的毛衣
·
SpringBoot整合 Camunda ...
·
1 年前
·
爱旅游的牛排
·
pyscenic分析:视频教程 - 知乎
·
1 年前
·
俊逸的炒饭
·
解决vue中reader.onload读取文 ...
·
1 年前
·
慷慨的蚂蚁
·
突然辞职!中信建投总经理李格平提交辞职报告, ...
·
1 年前
·
link之家
›
Spring Boot – 数据源配置 · HowToDoInJava 中文系列教程 · 看云
https://www.kancloud.cn/apachecn/howtodoinjava-zh/1952572
会搭讪的饭盒
5 月前
# Spring Boot – 数据源配置 > 原文: [https://howtodoinjava.com/spring-boot2/datasource-configuration/](https://howtodoinjava.com/spring-boot2/datasource-configuration/) 了解什么是数据源以及如何在 Spring Boot 应用程序中创建和自定义`DataSource` bean。 ## 1\. 什么是数据源 数据源是用于连接任何物理数据源的工厂。 `DriverManager`工具的替代品。 它使用 URL 以及一些凭据来建立数据库连接。 实现[`javax.sql.DataSource`](https://docs.oracle.com/javase/10/docs/api/javax/sql/DataSource.html)接口的对象通常会在 JNDI 服务中注册,并且可以使用其 JNDI 名称进行发现。 数据源可用于获取: * 标准`Connection`对象 * 可以在连接池中使用的连接 * 可以在分布式事务和连接池中使用的连接 ## 2\. 数据源配置 Spring Boot 允许以两种方式定义数据源配置,即 Java 配置和属性配置。 `DataSourceAutoConfiguration`在为我们配置`DataSource` bean 之前,先在类路径上检查`DataSource.class`(或`EmbeddedDatabaseType.class`)。 #### 2.1. Maven 如果尚未定义,请包含`spring-boot-starter-data-jpa`进行投影。 它带来了所有必要的依赖关系,包括用于各种数据库的 JDBC 驱动程序,例如`mysql-connector-java`用于连接到 mysql 。 如果我们计划在某个步骤(例如测试)使用嵌入式数据库,则可以单独导入 H2 db。 `pom.xml` ```java
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
2.4.1
runtime
#### 2.2. `application.properties` `application.properties`文件中的外部配置属性(`spring.datasource.*`)提供了`DataSource`配置。 属性配置将配置与应用程序代码分离。 这样,我们甚至可以从配置提供程序系统中导入数据源配置。 下面给出的配置显示了 H2,MySQL,Oracle 和 SQL Server 数据库的示例属性。 > 我们通常不需要指定`driver-class-name`,因为 Spring Boot 可以从 url 推断出大多数数据库。 ```java spring.datasource.url=jdbc:h2:file:C:/temp/test spring.datasource.username=sa spring.datasource.password= spring.datasource.driverClassName=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # MySQL #spring.datasource.url=jdbc:mysql://localhost:3306/test #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect # Oracle #spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driver-class-name=oracle.jdbc.OracleDriver #spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect # SQL Server #spring.datasource.url=jdbc:sqlserver://localhost;databaseName=springbootdb #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver #spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect #### 2.3. `DataSource` Bean 推荐的创建`DataSource` bean 的方法是在带有`@Configuration`注解的类中使用`DataSourceBuilder`类。 数据源也使用基础连接池。 `JpaConfig.java` ```java @Configuration public class JpaConfig { @Bean public DataSource getDataSource() DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("org.h2.Driver"); dataSourceBuilder.url("jdbc:h2:file:C:/temp/test"); dataSourceBuilder.username("sa"); dataSourceBuilder.password(""); return dataSourceBuilder.build(); #### 2.4. JNDI 数据源 如果我们将 Spring Boot 应用程序部署到应用服务器,则可能需要使用应用服务器的内置功能来配置和管理`DataSource`,并使用 JNDI 对其进行访问。 我们可以使用`spring.datasource.jndi-name`属性来执行此操作。 例如 ```java #JBoss defined datasource using JNDI spring.datasource.jndi-name = java:jboss/datasources/testDB ## 3\. 连接池 #### 3.1. HikariCP,tomcat 池和公用 DBCP2 对于要创建的池数据源,Spring Boot 会验证有效的`Driver`类是否可用。 如果我们设置`spring.datasource.driver-class-name`属性,则该驱动程序类必须是可加载的。 自动配置首先尝试查找和配置`HikariCP`。 如果`HikariCP`可用,则始终选择它。 否则,如果找到 **Tomcat 池**,则对其进行配置。 如果 HikariCP 和 Tomcat 池数据源均不可用,并且 **Commons DBCP2** 不可用,则使用它。 > `spring-boot-starter-data-jpa`起动器自动获得对`HikariCP`的依赖。 #### 3.2. 自定义设置 还可以通过使用它们各自的前缀(`spring.datasource.hikari.*`,`spring.datasource.tomcat.*`和`spring.datasource.dbcp2.*`)微调[实现特定的设置](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#data-properties)。 例如,我们可以使用以下属性来[定制 DBCP2 连接池](https://commons.apache.org/proper/commons-dbcp/configuration.html)。 ```java spring.datasource.dbcp2.initial-size = 50 spring.datasource.dbcp2.max-idle = 50 spring.datasource.dbcp2.default-query-timeout = 10000 spring.datasource.dbcp2.default-auto-commit = true ## 4\. 使用 Spring Boot 的多个数据源 要配置多个数据源,请创建所需的任意多个 bean 定义,但将`DataSource`实例之一标记为`@Primary`,因为各种自动配置都希望能够按类型获取。 请记住,如果我们创建自己的数据源,则会取消自动配置。 因此,我们负责为所有数据源 bean 提供配置。 `JpaConfig.java` ```java @Configuration public class JpaConfig { @Bean(name = "h2DataSource") public DataSource h2DataSource() DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("org.h2.Driver"); dataSourceBuilder.url("jdbc:h2:file:C:/temp/test"); dataSourceBuilder.username("sa"); dataSourceBuilder.password(""); return dataSourceBuilder.build(); @Bean(name = "mySqlDataSource") @Primary public DataSource mySqlDataSource() DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.url("jdbc:mysql://localhost/testdb"); dataSourceBuilder.username("dbuser"); dataSourceBuilder.password("dbpass"); return dataSourceBuilder.build(); 在自动装配数据源时,Spring Boot 将首选主数据源,即`mySqlDataSource`。 要自动装配另一个非主要数据源,请使用`@Qualifier`注解。 `Autowire primary datasource` ```java @Autowired DataSource dataSource; `Autowire NON-primary datasource` ```java @Autowired @Qualifier("h2DataSource") DataSource dataSource; ## 5\. 结论 Spring Boot 提供了非常简单的方法来创建数据源 bean – 使用属性配置或使用 java 配置`@Bean`。 Spring Boot 提供了现成的自动配置以供使用,可以通过`application.properties`文件中的高级选项进一步自定义。 Spring Boot 首先尝试查找和配置连接池,然后是 HikariCP,然后是 Tomcat 池,然后是 Commons DBCP2。 `HikariCP`内置有`spring-boot-starter-jdbc`或`spring-boot-starter-data-jpa`起动器。 我们可以配置多个数据源,并且其中之一必须标记为`@Primary`。 默认情况下,主数据源是自动装配的,其他数据源需要与`@Qualifier`注解一起自动装配。 学习愉快! [下载源码](https://github.com/lokeshgupta1981/SpringExamples/tree/master/rest-crud-hibernate)
HowToDoInJava Spring 教程
Spring 5
Spring 5 教程
Spring 5 的新功能和增强功能
Spring 使用注解配置 Bean
Spring bean – XML 配置
Spring – @Lazy加载
Spring DispatcherServlet – 它是如何工作的?
Spring @PostMapping示例 – @GetMapping示例
Spring 5 MVC + Hibernate 5 示例
Spring 和 CORS
Spring Security 5 – Java 配置
Spring Security 5 登录表单示例
Spring
Spring 教程
Spring – IoC 容器
Spring – 控制反转与依赖注入
Spring 5 – Bean 范围
Spring – Bean 生命周期
Spring BeanPostProcessor示例
SpringBean 自动装配 – @Autowired
Spring 注解
Spring – 原型注解
Spring @Scheduled – 安排任务的 4 种方法
Spring 定时器任务
Spring – 应用事件
Spring i18n – ResourceBundleMessageSource
Spring ResourceLoaderAware - 在 Spring 中读取文件
Spring 属性编辑器 – CustomEditorConfigurer示例
Spring – 使用JavaMailSender发送电子邮件
Spring 的无版本模式(最新版本)
Spring 面试问答
编写配置文件的 13 个 Spring 最佳实践
SpringBoot 2
SpringBoot 教程
spring-boot-starter-parent示例
spring-boot-starter Maven 模板
Spring Boot 多模块 Maven 项目示例
Spring Boot 注解
Spring Boot2 @SpringBootApplication自动配置
Spring Boot 和 AOP
Spring Boot 日志指南
Spring Boot Devtools 教程
Spring Boot WAR 包示例
Spring Boot 2 REST API 示例
Spring Boot Crud 操作示例与 Hibernate
Spring Boot 2 – OAuth2 Auth 和资源服务器
在 Spring Boot 2 中进行测试
Spring RestTemplate – Spring REST 客户端示例
Spring Boot – CRUD 应用程序
Spring Boot Hibernate 配置示例
Spring Boot – 数据源配置
Spring Boot 异常处理 – @ExceptionHandler示例
Spring Boot 缓存示例教程
使用 Spring Boot 的 SpringRetry 模块示例
Spring Boot Security Rest 基本身份验证示例
Spring Boot 和 H2 数据库
Spring Boot 2 和 ehcache 3 示例
Spring Boot 2 与 Gson
Spring Boot Remoting – Spring RMI 注解示例
SpringBoot – 发送带有附件的电子邮件
Spring Boot 面试问题
SpringBoot
SpringBoot – CommandLineRunner接口示例
Spring Boot – 配置 Jetty 服务器
Spring Boot 更改嵌入式服务器的默认端口
Spring Boot – 更改上下文路径
Spring Boot SSL(HTTPS)示例
Spring Boot – 获取所有已加载的带有类类型信息的 bean
Spring Boot – 自定义PropertyEditor配置示例
Spring Boot @Scheduled注解示例
Spring Boot Jersey 示例
Spring Boot SOAP Web 服务示例
Spring Boot SOAP 客户端 – WebServiceTemplate示例
带有嵌入式 ActiveMQ 的 Spring Boot JMSTemplate
Spring Boot Hello World 示例 – Spring Boot REST 示例
Spring Boot JSP 视图解析器示例
SpringBoot – 执行器
Spring Boot – 带有 JAX-RS 注解的基于角色的安全性
Spring Boot RSS feed 和 ROAM
Spring Boot ehcache 2 示例
SpringBatch
Spring Batch + Spring Boot Java 配置示例
Spring Batch 事件监听器
Spring Batch ItemProcessor示例
使用 Spring TaskScheduler进行 Spring Batch 作业调度
Spring Batch Quartz Java 配置示例
Spring Batch + Quartz + H2 Jdbcjobstore 示例
在 Quartz 作业中注入 Spring 依赖项
Spring Batch FlatFileItemReader – 读取 CSV 示例
Spring Batch FlatFileItemWriter – 写入 CSV 文件
Spring Batch MultiResourceItemReader – 读取多个 CSV 文件示例
Spring Batch 读取后删除或存档文件
Spring Batch 已处理记录的计数示例
Spring Batch CSV 到数据库 – Java 注解配置示例
Spring Cloud
微服务 – 定义,原理和优势
服务监控 – Hystrix,Eureka 管理员和 Spring Boot 管理员
Hoverfly – 微服务虚拟化示例
ELK 堆栈示例教程
Docker 的 Hello World 示例
集成 Git 的 Spring Cloud Config Server
使用 Netflix Eureka 进行 Spring Cloud 服务发现
Consul 服务注册和发现示例
Hystrix 断路器模式 – SpringCloud
如何将 Spring Boot 应用程序部署到 Cloud Foundry 平台
Netflix Zuul 示例 – Zuul API 网关模式 – Spring Cloud 教程
Spring Cloud Zipkin 和 Sleuth 示例
Spring cloud ribbon 和 Eureka – 客户端负载均衡器示例
Spring AOP
Spring AOP 教程示例
Spring AOP – AspectJ 注解配置示例
Spring AOP + AspectJ XML 配置示例
Spring AOP AspectJ @Before注解示例
Spring AOP AspectJ @After注解示例
Spring AOP AspectJ @Around注解示例
Spring AOP AspectJ @AfterReturning注解示例
Spring AOP AspectJ @AfterThrowing示例
Spring AOP 事前建议示例
Spring AOP 事后建议示例
Spring AOP 围绕建议示例
Spring AOP 返回后建议示例
Spring AOP 抛出后建议示例
Spring AOP AspectJ 切入点表达式示例
Spring AOP – 切面顺序
带有加载时织入的非公开方法上的 Spring 事务
Spring 热门 AOP 面试问题及答案
Spring MVC
Spring MVC 教程
Spring MVC Hello World 示例
使用 Maven 和 JSTL 的 Spring MVC Hello World 示例
Spring @RequestMapping注解示例
Spring MVC 自定义验证器示例
Spring Bean 验证 – JSR-303 注解
Spring MVC 填充和验证下拉列表示例
Spring MVC 示例 – 显示,验证和提交表单
Spring MessageSourceAware Java Bean 示例
Spring MVC XmlViewResolver配置示例
Spring MVC 国际化(i18n)和本地化(i10n)示例
Spring MVC 拦截器示例 – XML 和 Java 注解配置
Spring HandlerInterceptor示例
Spring MVC 在 ajax 和 jquery 中使用进度条上传多个文件
Spring MVC 多文件上传示例
Spring MVC 下载文件控制器示例
Spring MVC 面试问题与答案
Spring MVC InternalResourceViewResolver配置示例
Spring MVC ResourceBundleViewResolver配置示例
Spring MVC SimpleMappingExceptionResolver示例
Spring MVC:<context:annotation-config>与<context:component-scan>
ContextLoaderListener与DispatcherServlet
SpringSecurity
SpringSecurity 教程
具有保护切入点的 Spring 方法安全性
Spring Security Siteminder 预身份验证示例
Spring Security 登录表单示例
使用 JSP Taglibs 的 Spring 视图层安全
Spring Security – JDBC 用户服务示例
Spring Security UserDetailsService示例
Spring Security 基本身份验证示例
使用 JUnit 测试 Spring Security Auth
使用@PreAuthorize和@Secured的 Spring 方法安全性
Spring ORM
Spring 3.2.5 AbstractRoutingDataSource示例
Spring 3 和 Hibernate 4 集成示例教程
Spring Hibernate 集成示例
Spring REST
Spring REST JSON 响应示例
Spring REST XML 响应示例
Spring REST 控制器示例
使用 JPA 配置的 Spring REST CRUD 示例
Spring REST 异常处理示例
Spring REST 请求主体和参数验证示例
Spring REST 自定义令牌认证示例
Spring REST – 多部分上传和下载示例
Spring REST Multipart – 多部分上传示例
Spring REST – HTTP OPTIONS 请求处理器示例
Spring REST – 访问被拒绝请求的 JSON 响应
Spring RestTemplate – Spring REST 客户端示例
Spring WebFlux
Spring WebFlux 教程
Spring Boot WebFlux WebSocket 示例
使用@WebFluxTest和WebTestClient进行 Spring Boot Webflux 测试
HowToDoInJava Java 教程
核心 Java 教程
什么是 Java 编程语言?
什么是 Java JDK,JRE 和 JVM – 深入分析
Java 命名约定
Java 类路径
Java 变量
Java 运算符指南
Java 关键字
Java 中的数据类型
Java 中的原始数据类型
Java 包装器类 – 自动装箱,拆箱和转换示例
Java 中的语句类型
Java 控制流语句
Java 中的标签语句
Java 字符串类指南
Java 创建类 – 如何创建对象?
如何在 Java 中创建不可变的类
Java main()方法
Java 注释
Java 按值传递与按引用传递
Java 系统属性
Java 静态 – 变量,方法,块,类和导入语句
Java 中的静态导入语句
Java hashCode()和equals() – 契约,规则和最佳实践
Java this和super之间的区别
32 位 Java 与 64 位 Java 之间的区别
java.exe和javaw.exe之间的区别
Java 查看/生成类文件的字节码
Java 中的小端和大端
Java 命令行参数
在 Java 中比较浮点数或双精度数的正确方法
Java 递归指南
Java 偶对
Java 元组 – 使用 Java 中的元组
sun.misc.Unsafe类的用法
Java UUID 生成器示例
Java 12 教程
Java 12 – 新特性和增强特性
收集器teeing()方法示例
字符串indent(count) – Java 中的行左缩进
精简数字格式
Java 11 教程
Java 11 的新特性和增强特性
String.isBlank() – 在 Java 中检查空白或空字符串
String.lines() – 获取行流 – Java 11
String.repeat() – 在 Java 中重复字符串 N 次
String.strip() – 删除开头和结尾的空格
文件readString() API – 将文件读取为 Java 中的字符串
文件writeString() API – 用 Java 将字符串写入文件
Java 10 教程
Java 10 特性和增强特性
Java 版本 – 基于时间的发行版本控制
Java var – 局部变量类型推断
Java 9 教程
Java 9 特性和增强特性
Java 9 – 精简字符串改进 [JEP 254]
Java 模块教程
Java 9 – JShell
Java – 日期流
Java 9 Stream API 的改进
Java 9 中的不可变集合和工厂方法
接口中的私有方法 – Java 9
Java 8 教程
Java 8 教程
Java 8 forEach
Java 8 流 API
Java 流装箱示例
Lambda 表达式
Java 8 – 函数式接口
Java 8 方法引用示例
Java 默认方法教程
Java 8 Optional:完整参考
Java 谓词示例 – 谓词过滤器
Java 8 – 日期和时间示例
Java 8 列出目录中的所有文件 – 六个示例
Java 8 – 逐行读取文件
Java 8 写入文件示例
Java WatchService API 教程
Java 8 解析字符串为日期
Java 8 – 连接字符串数组 – 将数组转换为字符串
Java Base64 编码和解码示例
Math 类中的 Java 精确算术运算支持
Java 8 带有 lambda 的Comparator示例
使用Pattern.compile()方法将 Java 正则表达式作为谓词
Java 字符串连接(CSV)示例
Java 8 两个日期之间的差异
Java – 内部与外部迭代
Java 中的安全随机数生成
Java 7 教程
Java 7 的更改,特性和增强
Java 菱形运算符 – Java 中的<>运算符
带字符串的 Java switch case
Java 7 中的try-with-resources
Java 7 中数字字面值的下划线
Java 抑制异常示例
Java 7 – 异常处理增强
Fork/Join 框架教程:ForkJoinPool示例
自动重新加载属性的 Java WatchService示例
面向对象原则
Java OOP 概念 – 面向对象的原则
Java 访问修饰符
Java 构造器
Java 实例初始化器块
Java 中的抽象示例
Java 封装与抽象
Java 继承
Java 多态示例
Java 方法重载与方法重载
接口与 Java 中的抽象类
Java extends与implements关键字
Java instanceof运算符
Java 中的多重继承
关联,聚合和组合
Java 并发指南
Java 并发教程
Java 多线程的发展和主题
Java 并发性 – 线程安全性?
并发与并行
Java 比较和交换示例 – CAS 算法
Java synchronized关键字
Java 中的对象级别锁与类级别锁
Java 中Runnable与Thread之间的区别
如何在 Java 中使用wait(),notify()和notifyAll()?
Java 并发性 – yield()和join()之间的区别
Java 中 sleep()和wait()之间的区别
锁和监视器之间的区别 – Java 并发
Java Callable Future示例
如何使用UncaughtExceptionHandler重新启动线程
使用ThreadPoolExecutor和Semaphore限制任务提交率
Java 执行器框架教程和最佳实践
Java 线程间通信 – PipedReader和PipedWriter
Java 死锁示例和解决方案
Java 集合
Java 中的集合
Java 中的数组
Java ArrayList指南
Java LinkedList类
Java HashMap指南
Java Hashtable类
Java LinkedHashMap类
Java TreeMap类
Java HashSet类
Java LinkedHashSet类
Java TreeSet类
Java Comparable接口示例
Java Comparator接口示例
Java Iterator接口示例
Java ListIterator接口
Java Spliterator接口
Java PriorityQueue类
Java PriorityBlockingQueue类
Java ArrayBlockingQueue类
Java TransferQueue – Java LinkedTransferQueue类
Java CopyOnWriteArrayList类
Java CopyOnWriteArraySet类
如何在 Java 中对数组,列表,映射和集合进行排序
Java 面试的 40 个热门问答集
Java IO 教程
Java IO 教程和示例
Java I/O 如何在较低级别上内部工作?
Java 标准 IO 与 Java NIO
如何在 Java 中复制目录
用 Java 递归删除目录
Java – 创建新文件
Java – 写入文件
Java – 附加到文件
Java 创建只读文件示例
Java 将文件读取为字符串(已针对 Java 8 更新)
Java 将文件读取到byte[]数组
Java – 逐行读取文件 – LineNumberReader
Java BufferedReader示例
Java – BufferedWriter
Java 读写属性文件示例
从资源文件夹读取文件 – Spring 示例
Java – 读写 UTF-8 编码数据
Java 中如何检查文件是否存在
Java 文件复制 – 用 Java 复制文件的 4 种方法
Java FilenameFilter示例 – 查找/删除某些扩展名的文件
Java FileFilter示例
Java – 创建临时文件
Java – 写入临时文件
Java – 删除临时文件
Java – 读取控制台输入
Java – 使用Scanner类读取类型安全输入
在 Java 中将字符串转换为InputStream
在 Java 中将InputStream转换为字符串
Java – 创建受密码保护的 Zip 文件
Java – 解压缩带有子目录的文件
使用 Java 在 Linux 中管理不超过 N GB 的系统日志文件
在 Java 中生成 SHA 或 MD5 文件校验和哈希
Java 日期时间教程
Java – 日期和时间 API
Java – 日期验证
Java – 日期格式
Java LocalDate类
Java LocalTime类
Java LocalDateTime类
Java ZonedDateTime类
Java 8 – Period
Java 8 DateTimeFormatter
Java 8 – TemporalAdjusters
Java 8 – TemporalQuery
Java 8 – DayOfWeek
Java 日期 – 解析,格式和转换
Java 语言环境 – 创建和设置默认语言环境
Java 枚举教程
Java 枚举
带有字符串值的 Java 枚举
枚举真的是最好的单例吗?
枚举器和迭代器之间的区别?
Java 异常
Java try-finally块
Java throw关键字
Java 受检与非受检的异常
Java 同步和异步异常
Java NullPointerException - 如何在 Java 中有效处理空指针
Java 自定义异常 – 最佳实践
构造器可以声明初始化器块中引发的受检异常
Java 泛型教程
完整的 Java 泛型教程
Java 泛型 PECS - 生产者extends消费者super
Java 垃圾回收
Java 垃圾收集算法(直到 Java 9)
JVM 内存模型/结构和组件
Java 内存管理 – 垃圾回收算法
Java 序列化教程
Java 序列化 – 执行正确的序列化
Java serialVersionUID – 如何生成serialVersionUID
Java 外部化示例 – 更有效的序列化
Java 中Externalizable与Serializable之间的区别
将 Java 对象序列化为 XML – XMLEncoder和XMLDecoder示例
Java 中反序列化过程如何发生?
使用readObject和writeObject的 Java 自定义序列化
使用内存序列化的 Java 深层复制
字符串方法
Java String.concat()方法示例
Java String.hashCode()方法示例
Java String.contains()方法示例
Java String.compareTo()方法示例
Java String.compareToIgnoreCase()方法示例
Java String.equals()方法 – 字符串比较
Java String.equalsIgnoreCase()方法 – 不区分大小写的比较
Java String.charAt()方法示例
Java String.indexOf()方法示例
Java String.lastIndexOf()方法示例
Java String.intern()方法示例
Java String.split()方法示例
Java String.replace()方法示例
Java String.replaceFirst()方法示例
Java String.replaceAll()方法示例
Java String.substring()方法示例
Java String.startsWith()示例
Java String.endsWith()方法示例
Java String.toUpperCase()方法示例
Java String.toLowerCase()方法示例
Java 正则表达式教程
Java 正则表达式教程
Java 仅允许字母数字字符的正则表达式
Java 正则表达式 – 信用卡号验证
Java 正则表达式 – 加拿大邮政编码验证
货币符号的 Java 正则表达式
使用 Java 正则表达式进行日期验证
使用 Java 正则表达式进行电子邮件验证
Java 正则表达式密码验证示例
适用于希腊语扩展或希腊语脚本的 Java 正则表达式
验证 ISBN(国际标准书号)的 Java 正则表达式
检查输入文本的最小/最大长度的 Java 正则表达式
限制文本中的行数的 Java 正则表达式
限制输入中的单词数的 Java 正则表达式
验证 SSN(社会安全号码)的 Java 正则表达式
Java 正则表达式 – 英国邮政编码验证
Java 正则表达式 – 美国邮政编码验证
验证商标符号的 Java 正则表达式
验证国际电话号码的 Java 正则表达式
北美电话号码的 Java 正则表达式
Java NIO 教程
NIO 教程
如何创建路径 – Java NIO
使用缓冲区 – Java NIO 2.0
Java 通道教程 – NIO 2.0
3 种读取文件的方法 – Java NIO
Java 8 – 逐行读取文件
Java 内存映射文件 – Java MappedByteBuffer
Java NIO – 分散/聚集或向量 IO
通道之间的数据传输 – Java NIO
HowToDoInJava 其它教程
Maven 教程
如何在 Windows 上安装 Maven
Maven – 设置文件
Maven – 依赖管理
Maven 依赖范围
Maven - POM 文件
Maven – 父子 POM 示例
Maven – 本地,远程和中央仓库
Maven 本地仓库位置以及如何更改?
M2_REPO – 在 Eclipse 中更改 Maven 仓库的位置
Maven 代理设置 – Eclipse,命令行和全局设置
Maven 强制最低 Java 版本
Maven 创建 Java 项目 – 交互式与非交互式模式
在 Eclipse 中逐步创建 Maven Web 项目
多模块 Maven 项目 – 控制台
Eclipse 中的 Maven 多模块项目
Maven – 创建 Java 源文件夹
Maven BOM – 物料清单依赖项
在 Eclipse 中导入 Maven 远程原型目录
Eclipse 项目中的 Maven 自定义原型
已解决:Java 编译器级别与已安装的 Java 项目方面的版本不匹配
Maven ant 插件 – 从pom.xml生成build.xml
Maven IntelliJ IDEA 项目
Spring MVC JSTL 配置示例
Tomcat Maven 插件示例
Maven – Spring Boot 胖/Uber Jar
Maven Shade 插件 – UberJar/胖 Jar 示例
Maven – 删除所有损坏的 jar/依赖项
Gradle 教程 – 安装和 HelloWorld 示例
Log4j2 教程
Log4j2 JSON 配置示例
Log4j2 属性文件示例
Log4j2 xml 配置示例
Log4j2 RollingFileAppender示例
Log4j2 多个附加器示例
Log4j2 LevelRangeFilter示例
Log4j2 HTMLLayout配置示例
Log4j2 ThreadContext – 相同事务的鱼标日志
Log4j2 – 有用的转换模式示例
为 JUnit 测试用例配置 Log4j2
Log4j 教程
log4j.properties示例 – Log4j 属性文件示例
log4j.xml示例 – Log4j xml 配置示例
Log4j Maven 配置示例
Log4j 日志级别 – Log4j2 日志级别示例
Log4j ConsoleAppender配置示例
Log4jRollingFileAppender配置示例
Log4j SocketAppender和套接字服务器示例
Log4j JDBCAppender – 在数据库中创建日志
Log4j XMLLayout – 以 XML 格式创建日志
Log4j HTMLLayout – 以 HTML 格式创建日志
Log4j – 在运行时重新加载日志记录级别
SLF4j 与 Log4j – 哪个更好?
RESTEasy + Tomcat 7 + Log4j 日志记录示例
Dropwizard 教程
Dropwizard 教程
Dropwizard 教程 – HelloWorld 示例
Dropwizard – BasicAuth 安全示例
Dropwizard 运行状况检查配置示例
Dropwizard 客户端 – Jersey/HTTP 配置和示例
[已解决] Dropwizard – 无法解析配置(无法将类型 ID “http”解析为子类型)
RESTEasy 教程
JAX-RS 2.0 教程
RESTEasy + JBOSS 7 HelloWorld 应用
面向初学者的 RESTEasy 示例教程
JAX-RS @Path URI 匹配 – 静态和正则 URI
Java REST HATEOAS 示例
RESTEasy + Tomcat 7 + SLF4J 日志示例
RESTEasy + Tomcat 7 + Log4j 记录示例
RESTEasy - 文件下载示例
RESTEasy 文件上传 - HTML 表单示例
RESTEasy 文件上传 - HttpClient示例
使用 Ajax 的 JAX-RS 自定义验证示例
使用 Hibernate 验证器供应器进行 RESTEasy Bean 验证
RESTEasy ContainerRequestFilter - RESTEasy 安全过滤器示例
RESTEasy 基本认证和授权教程
RESTEasy JAXB XML 示例
RESTEasy Jettison JSON 示例
Jackson 的 RESTEasy JSON 示例
RESTEasy ExceptionMapper – 异常处理示例
RESTEasy 客户端 API
使用java.net包的 RESTful 客户端
使用 RESTful API 的 RESTEasy 客户端
Apache HttpClient GET 和 POST 示例
RESTEasy Javascript/Ajax 客户端演示
JAX-RS 2.0 RESTEasy 3.0.2.Final 客户端 API 示例
RESTEasy 最佳实践
RESTEasy - 与ResteasyProviderFactory共享上下文数据
RESTEasy ExceptionMapper – 异常处理示例
使用 ETag 的 RESTEasy 缓存控制示例
RESTEasy – 启用 Gzip 压缩内容编码
比较 SOAP 与 RESTful Web 服务
Jersey 教程
Jersey HelloWorld 例子
Jersey2 HelloWorld 示例 – Jersey2 教程
jersey-quickstart-webapp HelloWorld 示例
Jersey 使用过滤器记录请求和响应实体
Jersey - 如何在 REST API 响应中设置 Cookie
Jersey 文件下载示例 – StreamingOutput
Jersey 文件上传示例 – Jersey2 MultiPartFeature
Jersey - Ajax 多文件上传示例
Jersey 异常处理 – Jersey ExceptionMapper示例
Jersey + MOXy JSON 示例
Jersey + JSONP 示例
Jersey + Google Gson 示例
Jersey REST API 安全示例
Jersey 客户端
Jersey 客户端示例 – Jersey2 客户端 API
Jersey REST 客户端认证示例
Jersey 客户端 - 设置 Cookie 示例
JDBC 教程
Java JDBC 教程
Java – JDBC 连接示例(MySQL)
Java – JDBC 驱动类型
JDBC SELECT查询示例
JDBC SQL INSERT查询示例
JDBC SQL DELETE查询示例
Java JDBC PreparedStatement示例
JDBC 性能优化技巧
Hiberate 教程
Hiberate 教程
Hibernate 示例 – HelloWorld 示例逐步简介
Hibernate 获取实体示例 – get与load方法
Hibernate 插入查询教程
Hiberate 合并和刷新实体
Hibernate 4 – 获取延迟加载的实体引用
从数据库中插入/选择 Blob 的 Hiberate 示例
Hiberate save()和saveOrUpdate()方法
Hiberate 实体/持久化生命周期状态
Hibernate 4:如何构建SessionFactory
Hiberate 实体等价和等同
Hibernate JPA 级联类型
Hibernate 延迟加载教程
Hiberate 条件查询示例
Hibernate HQL(Hiberate 查询语言)示例
Hibernate @NamedQuery教程
Hibernate – 如何定义实体之间的关联映射
通过示例了解 Hibernate 一级缓存
Hiberate 二级缓存如何工作?
Hibernate EhCache 配置教程
Hibernate OSCache 配置示例教程
Hibernate C3P0 连接池配置教程
Hiberate 内存数据库
Hibernate 验证器 – Java Bean 验证示例
Hibernate 验证器 CDI – @HibernateValidator示例
[已解决] UnexpectedTypeException - 找不到约束验证器
Hiberate 注解
Hibernate / JPA2 持久化注解教程
Hiberate 注解与映射 – 优缺点
@Immutable和@NaturalId – 特定于 Hiberate 的注解
Hibernate @NaturalId示例教程
Hiberate 一对多映射注解示例
Hiberate 多对多映射注解示例
Hiberate 一对一映射注解示例
JUnit5 教程
JUnit5 教程
JUnit5 测试生命周期
JUnit5 @BeforeAll注解示例
JUnit5 @BeforeEach注解示例
JUnit5 @AfterEach注解示例
JUnit5 @AfterAll注解示例
JUnit5 @RepeatedTest注解示例
JUnit5 @Disabled测试示例
JUnit5 @Tag注解示例
JUnit5 预期的异常 – assertThrows()示例
JUnit5 断言示例
JUnit5 假设示例
JUnit5 测试套件示例
JUnit5 和 Gradle
JUnit5 Maven 依赖项
JUnit5 – 在 Eclipse 中执行测试
Eclipse 的 JUnit5 测试模板
JUnit5 与 JUnit4
JUnit4 教程
JUnit 教程
JUnit 测试套件示例
JUnit JUnitCore示例
使用 Maven 执行 JUnit 测试用例
JUnit4 – 基于假设的测试用例
Junit 预期异常测试用例示例
JUnit 测试监听器– JUnit RunListener示例
JUnit 测试超时 – JUnit5 超时示例
JUnit 有序测试执行示例
JUnit 参数化测试示例
Junit 参数化测试 – @Theory和@DataPoints
JUnit – 使用TemporaryFolder和@Rule创建临时文件/文件夹
TestNG 教程
TestNG 教程
TestNG 教程(使用 Eclipse)
如何从 Maven 运行testng.xml
TestNG 注解教程
TestNG – 预期异常和预期消息教程
TestNG – 如何禁用/忽略测试方法
TestNG 并行执行测试,类和套件
TestNG – 依赖测试示例
TestNG – 超时测试教程
TestNG @Parameters – 测试参数示例
TestNG @DataProvider – 测试参数示例
TestNG @Factory注解教程
TestNG – @Factory和@DataProvider之间的区别
TestNG 的前后注解
TestNG – 测试组,元组,默认组示例
Mockito 教程
Mockito2 教程 – JUnit Mockito 示例
Mockito 注解– @Mock,@Spy,@Captor,@InjectMock
Mockito – @Mock和@InjectMock注解之间的区别
Mockito – 验证具有不同参数的多个方法调用
Spring Boot,Mockito 和 Junit – 单元测试服务层
[已解决] IllegalStateException:无法初始化插件MockMaker
使用 PowerMock 进行模拟测试(带有 JUnit 和 Mockito)
TypeScript 教程
TypeScript 教程
TypeScript 类型
TypeScript 联合类型
字符串字面值类型
TypeScript 变量 – var,let和const
TypeScript 模板字符串
TypeScript 算术运算符
TypeScript 逻辑运算符
TypeScript 比较运算符
TypeScript for…of循环
TypeScript 中的展开运算符
TypeScript 中的数组
TypeScript 中的枚举
TypeScript 映射
TypeScript 集合
TypeScript 函数 – 剩余,可选和默认参数
TypeScript 函数或方法重载
转译器(Transpiler)与编译器
JavaScript 中的真值和假值
相等运算符(==)与严格相等运算符(===)
JavaScript 中的undefined vs null
JavaScript 变量提升
tsconfig.json – TypeScript 编译器配置
Angular(2.x)教程
Angular 开发工作区设置
[已解决] Npm 安装挂起或时间过长
模拟 REST 服务器来伪造在线 API
Angular 插值
Angular 组件
Angular 模板和视图
Angular 服务示例
带有 RxJS Observable的 Angular HttpClient示例
AngularJS(1.x)教程
AngularJS 教程 – HelloWorld 示例
AngularJS – jQueryLite(jqLite)教程
AngularJS 服务(内置和自定义)
AngularJS Spring MVC Rest 示例
JavaScript / jQuery 教程
Ajax 教程 – 面向初学者的 Ajax 指南
完整的 jQuery Ajax($.ajax)教程
jQuery 深度克隆示例
jQuery 选择器 – 完整列表
jQuery – 所有选择器(“*”) – 通用选择器
jQuery – 检测剪切,复制或粘贴事件
jQuery 检测ENTER键按下事件
jQuery – Keypress和Keydown事件之间的区别
关于 StackOverflow 的最佳 jQuery 讨论
JavaScript – 相等(==)与身份(===)运算符
您必须知道的 JavaScript 变量范围规则
JavaScript:定义全局变量的正确方法
在 JavaScript 中实现 MVC 和 PubSub
JavaScript DOM 对象与 jQuery 对象
Jasmine 单元测试教程及示例
JavaScript 日志 – 在 JSON 中屏蔽敏感信息
Android 教程
Android 教程:关键概念
Android 教程:在 Windows 上安装 Android
Android 教程:如何创建 Android 应用/项目
Android 教程:Android 项目结构,文件和资源
Android 清单:指定 Android 应用和 SDK 版本
如何加快缓慢的 Android AVD / 模拟器
Hadoop 教程
Hadoop – 大数据教程
Hadoop MapReduce 初学者教程
HDFS – Hadoop 分布式文件系统架构教程
Brewer 的 CAP 定理简述
Java 云开发简介和工具
MongoDB 教程
MongoDB 简介:为什么选择 MongoDB?
如何在 Windows 上安装 MongoDB
Java MongoDB:使用 GridFS API 获取/保存图像
Java MongoDB:在集合中插入文档的示例
MongoDB 查找文档示例
微服务 – 定义,原理和好处
Apache Kafka 教程
Apache Kafka – 简介
Apache Kafka – Windows 10 入门
Kafka 的 Spring Boot – HelloWorld 示例
Spring Boot Kafka JsonSerializer示例
JMS 教程
JMS 教程 – Java 消息服务教程
JMS 点对点消息示例
JMS 发布/订阅消息示例
HornetQ 教程
HornetQ 单体 – 基本的 JMS 消息传递示例
使用 Maven 的 HornetQ 独立服务器示例
Spring3 Hornetq 独立集成示例
Gson 教程
Gson 教程
Gson 安装
GSON – 序列化和反序列化 JSON
Gson – JSON 输出的精美打印
GSON – 将 JSON 数组解析为 Java 数组或列表
GSON – 序列化和反序列化 JSON 为集
Gson – 序列化和反序列化包含自定义对象的HashMap
Gson – GsonBuilder配置示例
Gson - 序列化NULL值
Gson @Since – 版本支持
Gson @SerializedName
Gson – 排除或忽略字段
Gson - JsonReader
Gson - JsonParser
Gson – 自定义序列化和反序列化
Gson – 快速指南
JAXB 教程
JAXB 注解
JAXB @XmlRootElement注解示例
JAXB @XmlElementWrapper注解示例
JAXB Marshaller(编组器)示例
JAXB Unmarshaller(解组器)示例
JAXB 读取 XML 到 Java 对象的示例
使用 Moxy 和 Jaxb 将 JSON 转换为 Java 对象的示例
JAXB 将 Java 对象写入 XML 的示例
JAXB 将对象转换为 JSON 的示例
JAXB – 在 Java 中编组和解组HashMap
JAXB – 编组和解组对象列表或集合
使用 Eclipse 从 JAXB Java 类生成 XSD
JAXB 模式验证
[已解决]:javax.xml.bind.JAXBException:java.util.ArrayList或其任何超类不是此上下文的已知类
[已解决]:线程“main”com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException中的异常:3 个IllegalAnnotationExceptions计数
没有@XmlRootElement的 JAXB 编组 – 缺少@XmlRootElement错误
不带 jaxb 注解的解组
Jackson 教程
Jackson2 – 将 Java 对象转换为 JSON,并将 JSON 字符串转换为对象
Jackson 将对象转换为 json 并将 json 转换为对象
Jackson – 将 JSON 转换为Map并将Map转换为 JSON
Java XML 教程
Java 读取 XML – Java DOM 解析器示例
Java SAX 解析器 – XML 读取示例
Java JDOM2 – XML 读取示例
使用 Java StAX 解析器读取 XML – 游标和迭代器 API
DOM 与 Java 中的 SAX 解析器
Java 将 XML 转换为属性 – 从 XML 文件读取属性
Java 将属性文件转换为 XML 文件
Java 字符串到 XML – 将字符串解析为 XML DOM 的示例
Java XML 转换为字符串 – 将 XML 对象写入文件的示例
Java XPath 示例 – XPath 教程
Java xpath 示例 – 在 xml 文件上求值 xpath
Java8 xpath 示例 – 在字符串上求值 xpath
Java XPath 表达式示例
Java XPath NamespaceContext – 命名空间解析示例
Java XPath 从 XML 获取属性值
在 Java 中使用 xpath 查找具有属性值的 xml 元素
Java XPath – 检查节点或属性是否存在?
Eclipse 教程
在 Eclipse 中导入 Maven 远程原型目录
使用 Eclipse 快速搜索插件进行更快的文本搜索
如何在 Eclipse 中显示非英文 unicode(例如中文)字符
如何在 Eclipse 中增加控制台输出限制
创建 Eclipse 模板以加快 Java 编程
在 5 分钟内使 Eclipse 更快
如何在印地语中编译和运行 Java 程序
Java 覆盖最终静态方法 – 方法是覆盖还是隐藏?
[已解决] 在 Eclipse 的 Java 构建路径中找不到超类“javax.servlet.http.HttpServlet”
版本控制系统教程
分布式版本控制系统如何工作?
版本控制系统(VCS)如何工作?
如何从 Google Code 项目中签出源代码
Tomcat 教程
Tomcat – 架构和server.xml配置
如何在默认的 HTTP 端口 80 中运行 tomcat
Tomcat – 启用/禁用目录列表
Tomcat SSL 或 HTTPS 配置示例
通过单个服务器安装运行 Tomcat 的多个实例
Tomcat Maven 插件示例
Spring,Tomcat – 获取负载均衡器后面的真实 IP
Web 服务器如何工作?
Linux 教程
JStack 线程转储分析器
使用 Java 在 Linux 中管理系统日志文件不超过 N GB
Swagger – Spring REST 示例
GoF 设计模式
创建型设计模式
Java 单例模式介绍
Java 中的构建器设计模式
Java 工厂模式说明
抽象工厂模式解释
Java 中的原型设计模式
行为型设计模式
责任链设计模式
命令设计模式
迭代器设计模式
中介者设计模式
备忘录设计模式
观察者设计模式
状态设计模式
策略设计模式
模板方法设计模式
访问者设计模式示例
结构型设计模式
Java 中的适配器设计模式
桥接设计模式
组合设计模式
Java 中的装饰器设计模式
外观设计模式
享元设计模式
代理设计模式
Java 中的 SOLID 原则(含示例)
单一责任原则
Java 最佳实践
Java 最佳实践指南
编写好的单元测试的 FIRST 原则
您应该如何对 DAO 层进行单元测试
JUnit 最佳实践指南
不良单元测试用例的 8 个迹象
20 个 Java 异常处理最佳实践
13 个编写 Spring 配置文件的最佳实践
Java Web 应用性能改进技巧
Java 算法
Java 算法和实现
冒泡排序 Java 示例
插入排序 Java 示例
归并排序 Java 示例
快速排序 Java 示例
选择排序 Java 示例
Java AES 加密解密示例
使用 Soundex 算法实现语音搜索
Java 比较和交换示例 – CAS 算法
Python 教程
Python 教程
如何在 Sublime 编辑器中安装 Python 包
Python – 注释
Python – 变量
Python – 数据类型
Python – 关键字
Python – 字符串
Python – 列表
Python – 元组
Python max()和min()– 在列表或数组中查找最大值和最小值
Python 找到 N 个最大的或最小的项目
Python 读写 CSV 文件
Python httplib2 – HTTP GET 和 POST 示例
Python 将元组解包为变量或参数
Python 解包元组 – 太多值无法解包
Python 多重字典示例 – 将单个键映射到字典中的多个值
Python OrderedDict – 有序字典
Python 字典交集 – 比较两个字典
Python 优先级队列示例
RxJava 教程
完整的 Java Servlet 教程
vaadin 教程
使用 Maven 的 vaadin HelloWorld Web 应用
Vaadin ComboBox示例
vaadin 文本字段示例
Vaadin Spring Security BasicAuth 示例
SQL 教程
SQL – 不使用临时表删除重复行
查找员工的第 N 高薪的 SQL 查询
SQLException:用户root@localhost的访问被拒绝
Struts2 教程
Struts2 HelloWorld 示例
Struts2 HelloWorld 注解示例
使用@InterceptorRef的 Struts2 自定义拦截器示例
Struts2 – 如何正确设置结果路径
Spring4 + Struts2 + Hibernate 集成教程
[已解决] 无法找到ref-name引用的拦截器类
[已解决]:找不到扩展名properties或xml的结果类型
数据结构教程
使用数组的 Java 栈实现
Java 中的自定义列表实现示例
HTML5 教程
HTML5 – <section>标签示例
HTML5 字符集 – 字符编码声明
HTML5 DOCTYPE声明示例
Java 题目
Java 面试题目与答案
Java 中的无效代码和无法访问的代码
Java 字符串回文 – Java 数字回文示例
检测LinkedList中的无限循环的示例
复合赋值运算符i += j与 Java 中的i = i + j不同
Java 中的 HiLo 猜谜游戏
Java 题目 – 查找所有重复的元素
Java 题目 – TreeMap的放置操作
题目 – 返回所有字符串中的第 N 长字符串
Java 题目:好的字符串 – 坏的字符串
题目 – 检查字符串是否完整(包含所有字母)
Java 中的反转字符串 - 单词反转字符串
用 Java 计算阶乘的 3 种方法
Java 中的 FizzBuzz 解决方案
从 Java 中的序列/数组中查找缺失的数字
Java – 不使用“new”关键字创建对象
Java 面试问题
Java 字符串面试问题与答案
Java 核心面试问题 – 第 1 部分
Java 核心面试问题 – 第 2 部分
Java 核心面试问题 – 第 3 部分
Java 面试的 40 个热门问答集
中级开发人员的 Java 面试问题
针对 Oracle 企业管理器项目的实际 Java 面试问题
HashMap和ConcurrentHashMap面试问题
Java 版本和新特性
推荐文章
冲动的凉茶
·
在jquery项目中怎样设置全局变量 - CSDN文库
2 月前
英俊的毛衣
·
SpringBoot整合 Camunda 流程引擎 - 上善若泪 - 博客园
1 年前
爱旅游的牛排
·
pyscenic分析:视频教程 - 知乎
1 年前
俊逸的炒饭
·
解决vue中reader.onload读取文件的异步问题_vue.js_脚本之家
1 年前
慷慨的蚂蚁
·
突然辞职!中信建投总经理李格平提交辞职报告,强调“个人原因”,或另有缘由
1 年前