文章目录
前言
一、简单项目的创建
二、常用依赖的引入
三、常用配置的编写
四、逆向工程的使用
五、常用类的编写
1. 自定义常量类
2. 自定义注解类
3. 自定义枚举类
4. 自定义异常类
5. 通用响应对象
6. 简单接口编写
7. 常用的工具类
六、网盘下载
前言
关于怎么搭建 SpringBoot 项目,我相信大部分开发者自己都能搭建好,至于我为什么还要写,主要是我自己觉得搭一个项目挺麻烦的,想搞一个基础的模子,以后学习其它的技术就可以直接引用这个模子,写下笔记便于日后回顾和修改,顺便发下博客。
注意:以下项目创建方式以及项目内容完全是根据个人喜好而搭建的,仅具借鉴意义~~
一、简单项目的创建
这里项目的创建,我使用的工具是 IDEA,还有一个很重要的事情就是管理项目,这里我建议项目最好有一个集中的地方管理,所以我创建了一个 my-project
的文件夹专门用于管理自己的项目。
打开 IDEA
工具,点击 File
-> New
-> Project...
创建一个项目
选择 Sring Initializr
(如果你用的是 IDEA 社区版的可能没有这个选项),完善以下资料,然后点击 Next
选择 SpringBoot 版本,点击 Finish
然后一个最简单的 spring-boot 项目就建好了,如果你只是为了创建一个 spring-boot 项目的话,到这里就可以结束了,以下内容很多东西都是按照我个人意愿去编写的,并不具有通用性,但是仍可借鉴使用~~
简单完善一下目录结构
com.duojiala.mikeboot
common ------------------------------------公共定义类
config ----------------------------------------配置类
controller -----------------------------------控制层
dao -------------------------------------------dao层
domain
annotations --------------------------注解类
bean -----------------------------------自定义类
dto --------------------------------------组装对象类
entity ----------------------------------实体类
enums ---------------------------------枚举类
req --------------------------------------请求体
resp ------------------------------------响应体
exceptions ------------------------------自定义异常类
service ------------------------------------服务层
imp -------------------------------------实现类
utils -------------------------------------------工具类
PS:以上并非标准,项目结构你可以根据自己的需求或者喜好去设计
二、常用依赖的引入
之前在创建项目的时候其实是可以选择添加依赖的,但是我没有去做,所以如果你按照我上述步骤创建项目的话,pom.xml
文件中只有两个依赖,如下:
接下来就是引入一些常用的依赖,供大家参考:
SpringBoot 项目的启动依赖:如果没有添加该依赖,启动类一运行会直接停止
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-web artifactId>
< scope> compile scope>
dependency>
lombok 依赖插件:方便实体类 bean 快速生成 get
set
方法,从而不用手动添加
< dependency>
< groupId> org.projectlombok groupId>
< artifactId> lombok artifactId>
dependency>
commons-lang3是Apache的Jakarta commons工程下具有一系列公共基础类,Lang组件主要是一些工具类,涉及到数组工具类,字符串工具类,字符工具类,数学方面,时间日期工具类,异常,事件等工具类。
< dependency>
< groupId> org.apache.commons groupId>
< artifactId> commons-lang3 artifactId>
< version> 3.10 version>
dependency>
通用Mapper依赖:是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。
< dependency>
< groupId> tk.mybatis groupId>
< artifactId> mapper-spring-boot-starter artifactId>
< version> 2.1.5 version>
dependency>
JDBC驱动包:用 JDBC 连接 MySQL 数据库时必须使用该 jar 包,能够与数据库建立连接、发送 SQL 语句以及处理结果。
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
dependency>
校验参数:就是一个规范,所有实现类必须是线程安全的,提供一些注解,但并不提供实现,可以根据需求去写一些有校验功能的注解。
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-validation artifactId>
dependency>
Fastjson:是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种 “假定有序快速匹配” 的算法,把 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。Fastjson 接口简单易用,已经呗广泛使用在序列化、协议交互、Web 输出、Android 客户端等多种应用场景。
< dependency>
< groupId> com.alibaba groupId>
< artifactId> fastjson artifactId>
< version> 1.2.51 version>
dependency>
Spring web依赖
< dependency>
< groupId> org.springframework groupId>
< artifactId> spring-web artifactId>
dependency>
mybatis 自动配置依赖
< dependency>
< groupId> org.mybatis.spring.boot groupId>
< artifactId> mybatis-spring-boot-autoconfigure artifactId>
< version> 2.1.1 version>
dependency>
表格依赖
< dependency>
< groupId> com.alibaba groupId>
< artifactId> easyexcel artifactId>
< version> 2.2.7 version>
dependency>
< dependency>
< groupId> org.apache.poi groupId>
< artifactId> poi-ooxml artifactId>
< version> 3.17 version>
dependency>
添加 mybatis 逆向工程插件,generator 的配置文件这里我放在 /resources/generator
目录下
< plugin>
< groupId> org.mybatis.generator groupId>
< artifactId> mybatis-generator-maven-plugin artifactId>
< version> 1.3.6 version>
< configuration>
< configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
configurationFile>
< overwrite> true overwrite>
< verbose> true verbose>
configuration>
< dependencies>
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
< version> 8.0.13 version>
dependency>
< dependency>
< groupId> tk.mybatis groupId>
< artifactId> mapper artifactId>
< version> 4.1.5 version>
dependency>
dependencies>
plugin>
最后我 pom.xml
文件的配置如下:
< 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 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0 modelVersion>
< parent>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-parent artifactId>
< version> 2.1.4.RELEASE version>
< relativePath/>
parent>
< groupId> com.duojiala groupId>
< artifactId> mike-boot artifactId>
< version> 0.0.1-SNAPSHOT version>
< name> mike-boot name>
< description> Demo project for Spring Boot description>
< properties>
< java.version> 1.8 java.version>
properties>
< dependencies>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter artifactId>
dependency>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-web artifactId>
< scope> compile scope>
dependency>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-test artifactId>
< scope> test scope>
< exclusions>
< exclusion>
< groupId> org.junit.vintage groupId>
< artifactId> junit-vintage-engine artifactId>
exclusion>
exclusions>
dependency>
< dependency>
< groupId> org.apache.commons groupId>
< artifactId> commons-lang3 artifactId>
< version> 3.10 version>
dependency>
< dependency>
< groupId> org.projectlombok groupId>
< artifactId> lombok artifactId>
dependency>
< dependency>
< groupId> tk.mybatis groupId>
< artifactId> mapper-spring-boot-starter artifactId>
< version> 2.1.5 version>
dependency>
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
dependency>
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-validation artifactId>
dependency>
< dependency>
< groupId> com.alibaba groupId>
< artifactId> fastjson artifactId>
< version> 1.2.51 version>
dependency>
< dependency>
< groupId> org.springframework groupId>
< artifactId> spring-web artifactId>
dependency>
< dependency>
< groupId> org.mybatis.spring.boot groupId>
< artifactId> mybatis-spring-boot-autoconfigure artifactId>
< version> 2.1.1 version>
dependency>
< dependency>
< groupId> com.alibaba groupId>
< artifactId> easyexcel artifactId>
< version> 2.2.7 version>
dependency>
< dependency>
< groupId> org.apache.poi groupId>
< artifactId> poi-ooxml artifactId>
< version> 3.17 version>
dependency>
dependencies>
< build>
< plugins>
< plugin>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-maven-plugin artifactId>
plugin>
< plugin>
< groupId> org.mybatis.generator groupId>
< artifactId> mybatis-generator-maven-plugin artifactId>
< version> 1.3.6 version>
< configuration>
< configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
configurationFile>
< overwrite> true overwrite>
< verbose> true verbose>
configuration>
< dependencies>
< dependency>
< groupId> mysql groupId>
< artifactId> mysql-connector-java artifactId>
< version> 8.0.13 version>
dependency>
< dependency>
< groupId> tk.mybatis groupId>
< artifactId> mapper artifactId>
< version> 4.1.5 version>
dependency>
dependencies>
plugin>
plugins>
build>
project>
三、常用配置的编写
这里自动创建的项目,配置文件默认是 properties
的文件,这里我改用成 yml
格式的(仅仅是个人习惯的问题)
application.yml
常用配置的编写:
server :
port : 8868
servlet :
context-path : /mike
spring :
application :
name : mike- boot
datasource :
url : jdbc: mysql: //127.0.0.1: 3306/mike? characterEncoding=UTF- 8&useSSL=false&serverTimezone=GMT%2B8
hikari :
username : 'root'
password : 'root'
driver-class-name : 'com.mysql.cj.jdbc.Driver'
mybatis :
configuration :
map-underscore-to-camel-case : true
log-impl : org.apache.ibatis.logging.stdout.StdOutImpl
四、逆向工程的使用
之前在常用依赖引入中有引入 mybatis 逆向工程的插件,这里主要就是去编写逆向工程的一些配置文件,以及使用
首先需要在 resources
目录下创建文件夹 com/duojiala/mikeboot/dao
目录(要和你 dao 目录相一致),如果你用 IDEA 创建的话,切记不可直接 com.duojiala.mikeboot.dao
这样创建,因为这样创建的文件夹只是一个名字叫做 com.duojiala.mikeboot.dao
的文件夹,并非多层目录,比如:
用 IDEA 要一个一个创建
在创建一个 generator
的文件夹,该文件夹下面加上两个配置文件 config.properties
和 generatorConfig.xml
,做完以上步骤之后大概是这样的
config.properties
中配置编写:
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc : mysql : //127.0.0.1: 3306/mike?useSSL=false&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8
jdbc.user=root
jdbc.password=root
javaModelTargetProject=src/main/java
javaModelTargetPackage=com.duojiala.mikeboot.domain.entity
mapperXMLTargetProject=src/main/resources
mapperXMLTargetPackage=com.duojiala.mikeboot.dao
mapperTargetProject=src/main/java
mapperTargetPackage=com.duojiala.mikeboot.dao
这里你要换成你自己的数据库,以及对应的映射关系要以你自己的项目去修改。
generatorConfig.xml
中配置编写:
DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
< generatorConfiguration>
< properties resource = " generator/config.properties" />
< context id = " Mysql" targetRuntime = " MyBatis3Simple" defaultModelType = " flat" >
< property name = " beginningDelimiter" value = " `" />
< property name = " endingDelimiter" value = " `" />
< plugin type = " tk.mybatis.mapper.generator.MapperPlugin" >
< property name = " mappers" value = " tk.mybatis.mapper.common.Mapper" />
< property name = " caseSensitive" value = " true" />
plugin>
< jdbcConnection driverClass = " ${jdbc.driverClass}"
connectionURL = " ${jdbc.url}"
userId = " ${jdbc.user}"
password = " ${jdbc.password}" >
jdbcConnection>
< javaModelGenerator targetPackage = " ${javaModelTargetPackage}"
targetProject = " ${javaModelTargetProject}" />
< sqlMapGenerator targetPackage = " ${mapperXMLTargetPackage}"
targetProject = " ${mapperXMLTargetProject}" />
< javaClientGenerator targetPackage = " ${mapperTargetPackage}"
targetProject = " ${mapperTargetProject}"
type = " XMLMAPPER" />
< table tableName = " %" >
< generatedKey column = " id" sqlStatement = " JDBC" />
table>
context>
generatorConfiguration>
现在我连接的是我本地数据,该库里面只有一张 user 表
现在通过 mybatis 逆向工程生成 user 表对应的 实体类 和 mapper 文件,按如下步骤
执行完可以看见项目中已经生成了所配置数据库中所有表的映射实体类和 Mapper 文件
如果你想要针对某一张表生成对应的映射实体类和 Mapper 文件,可将 generatorConfig.xml
文件中 标签中的 %
改成表明,例如:只生成 user 表的
< table tableName = " user" >
< generatedKey column = " id" sqlStatement = " JDBC" />
table>
同时,还需要在启动类上加上 @MapperScan
的注解扫描 mapper:@MapperScan(basePackages = {"com.duojiala.mikeboot.dao"})
五、常用类的编写
1. 自定义常量类
位于 common
目录下,创建示例类 DefineConstants.java
public class DefineConstants {
public static final String DEF_NUMBER = "0" ;
public static final String DEF_MONEY = "0.00" ;
}
2. 自定义注解类
位于 annotations
目录下,创建示例类 Describe.java
@Target ( { ElementType . METHOD, ElementType . FIELD, ElementType . ANNOTATION_TYPE, ElementType . CONSTRUCTOR, ElementType . PARAMETER, ElementType . TYPE_USE} )
@Retention ( RetentionPolicy . RUNTIME)
@Documented
public @interface Describe {
String desc ( ) ;
}
3. 自定义枚举类
位于 enums
目录下,创建性别枚举类 GenderEnum.java
@Getter
@AllArgsConstructor
public enum GenderEnum {
WOMAN ( 0 , "女" ) ,
MAN ( 1 , "男" )
;
private final int type;
private final String desc;
public static GenderEnum getGenderEnum ( int type) {
return Stream . of ( values ( ) ) . filter ( value -> value. getType ( ) == type) . findFirst ( ) . orElse ( null ) ;
}
public static String getDescByType ( int type) {
GenderEnum genderEnum = getGenderEnum ( type) ;
if ( genderEnum== null ) return null ;
return genderEnum. getDesc ( ) ;
}
}
位于 enums
目录下,再创建一个自定义异常枚举 ExceptionEnum.java
@AllArgsConstructor
@Getter
@ToString
public enum ExceptionEnum {
BAD_REQUEST ( 301 , "错误的请求" ) ,
NOT_FIND ( 302 , "未找到对应数据" )
;
private final int code;
private final String msg;
}
4. 自定义异常类
位于 exceptions
目录下,创建自定义公共异常 CommonException.java
public class CommonException extends RuntimeException {
private ExceptionEnum exceptionEnum;
public CommonException ( ExceptionEnum exceptionEnum) {
super ( exceptionEnum. getMsg ( ) ) ;
this . exceptionEnum = exceptionEnum;
}
public void setExceptionEnum ( ExceptionEnum exceptionEnum) {
this . exceptionEnum = exceptionEnum;
}
public ExceptionEnum getExceptionEnum ( ) {
return exceptionEnum;
}
@Override
public String getMessage ( ) {
return this . exceptionEnum. getMsg ( ) ;
}
}
5. 通用响应对象
位于 dto
目录下,创建一个通用的响应对象 ResponseBean.java
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Slf4j
public class ResponseBean {
private int code;
private String msg;
private Object data;
public static int SUCCESS_CODE = 200 ;
public static int ERROR_CODE = 300 ;
public static String SUCCESS_MSG = "Success" ;
public static String ERROR_MSG = "Error" ;
public static ResponseBean success ( ) {
return ResponseBean . builder ( )
. code ( SUCCESS_CODE)
. msg ( SUCCESS_MSG)
. build ( ) ;
}
public static ResponseBean success ( Object data) {
return ResponseBean . builder ( )
. code ( SUCCESS_CODE)
. msg ( SUCCESS_MSG)
. data ( data)
. build ( ) ;
}
public static ResponseBean error ( ) {
return ResponseBean . builder ( )
. code ( ERROR_CODE)
. msg ( ERROR_MSG)
. build ( ) ;
}
public static ResponseBean error ( int code, String msg) {
return ResponseBean . builder ( )
. code ( code)
. msg ( msg)
. build ( ) ;
}
}
6. 简单接口编写
请求体类,放在 req
目录下,创建 IdReq.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdReq {
private String id;
}
响应体类,放在 resp
目录下,创建 UserInfoResp.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserInfoResp {
private String id;
private String name;
private String birthday;
private String gender;
}
Controller 类,位于 controller
目录下,创建 UserController.java
@Slf4j
@RestController
@RequestMapping ( value = "/user" )
@RequiredArgsConstructor ( onConstructor = @__ ( @Autowired ) )
@CrossOrigin ( origins = "*" , methods = { RequestMethod . POST, RequestMethod . GET} )
public class UserController {
private final UserService userService;
@PostMapping ( value = "/query-user-info" )
public ResponseBean queryUserInfo ( @RequestBody @Validated IdReq req) {
return ResponseBean . success ( userService. queryUserInfo ( req) ) ;
}
}
Service 类,位于 service
目录下,创建 UserService.java
public interface UserService {
UserInfoResp queryUserInfo ( IdReq req) ;
}
Service 实现类,位于 impl
目录下,创建 UserServiceImpl.java
@Slf4j
@Service
@RequiredArgsConstructor ( onConstructor = @__ ( @Autowired ) )
public class UserServiceImpl implements UserService {
private final UserMapper userMapper;
@Override
public UserInfoResp queryUserInfo ( IdReq req) {
User user = userMapper. selectByPrimaryKey ( req. getId ( ) ) ;
if ( user == null ) {
throw new CommonException ( ExceptionEnum . NOT_FIND) ;
}
return UserInfoResp . builder ( )
. id ( user. getId ( ) . toString ( ) )
. name ( user. getName ( ) )
. birthday ( user. getBirthday ( ) )
. gender ( GenderEnum . getDescByType ( user. getGender ( ) ) )
. build ( ) ;
}
}
一个根据 id 查询用户的简单方法就写完了,postman 测试正常
7. 常用的工具类
位于 utils
目录下,这里我复制了些我常用的工具类
CommonUtil ---------------------------------------- 通用工具类
DateUtil ---------------------------------------------- 时间工具类
EnumUtil -------------------------------------------- 枚举工具类
PageHelperUtil ------------------------------------ 分页工具类
PureNetUtil ----------------------------------------- 网络访问工具类
StringTool ------------------------------------------- 字符串工具类
六、网盘下载
以下是我搭建这个基础 SpringBoot 项目的网盘下载链接:
链接:百度网盘 提取码:w7yo
你可能感兴趣的:(入门教程,java)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
深入解析JVM工作原理:从字节码到机器指令的全过程
一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为
JVM 内存模型深度解析:原子性、可见性与有序性的实现
练习时长两年半的程序员小胡
JVM 深度剖析:从面试考点到生产实践 jvm java 内存模型
在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J
Java | 多线程经典问题 - 售票
Ada54
一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3
SpringMVC的执行流程
1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,
JAVA接口机结构解析
秃狼
SpringBoot 八股文 Java java 学习
什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消
最新阿里四面面试真题46道:面试技巧+核心问题+面试心得
风平浪静如码
前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni
图论算法经典题目解析:DFS、BFS与拓扑排序实战
周童學
数据结构与算法 深度优先 算法 图论
图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或
【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge
本本本添哥
002 - 进阶开发能力 java
一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1
Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)
bug菌¹
Java实战(进阶版) java Java零基础入门 Java并发 线程池 多线程篇
本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行
Java 队列
tryxr
java 开发语言 队列
队列一般用什么哪种结构实现队列的特性数据入队列时一定是从尾部插入吗数据出队列时一定是从头部删除吗队列的基本运算有什么队列支持随机访问吗队列的英文表示什么是队列队列从哪进、从哪出队列的进出顺序队列是用哪种结构实现的Queue和Deque有什么区别Queue接口的方法Queue中的add与offer的区别offer、poll、peek的模拟实现如何利用链表实现队列如何利用顺序表实现队列什么叫做双端队列
JVM 内存分配与回收策略:从对象创建到内存释放的全流程
在JVM的运行机制中,内存分配与回收策略是连接对象生命周期与垃圾收集器的桥梁。它决定了对象在堆内存中的创建位置、存活过程中的区域迁移,以及最终被回收的时机。合理的内存分配策略能减少GC频率、降低停顿时间,是优化Java应用性能的核心环节。本文将系统解析JVM的内存分配规则、对象晋升机制,以及实战中的内存优化技巧。一、对象优先在Eden区分配:新生代的“临时缓冲区”大多数情况下,Java对象在新生代
代码随想录算法训练营第三十五天
01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
学C++的五大惊人好处
为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其
Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】
Tony666688888
java windows 开发语言
针对集合排序,java8可以用Stream流的sorted()进行排序。示例Bean以下我们会使用这个Bean来做示例。publicclassOrder{privateStringweight;privateDoubleprice;privateStringdateStr;//忽略getter、setter、构造方法、toString}字段排序首先是比较器Comparator,形式如下:Compa
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
java实习生40多天有感
别拿爱情当饭吃
从5月15日开始,我开始第一步步入社会,我今年大三,在一家上市互联网公司做一名实习生,主要做java后端开发。开始的时候,觉得公司的环境挺不错的,不过因为公司在CBD,所以隔壁的午饭和晚饭都要20+RMB,而且还吃不饱,这让我感觉挺郁闷的。一到下午,我就会犯困(因为饿)。因此,我又不得不买一些干粮在公司屯着。关于技术,有一个比较大的项目在需求调研当中,我们做实习生,就是辅助项目经理,测试功能,并且
大学生入门:初识方法及其易踩坑的点
在java学习过程中,我们不难发现有很多重复使用的功能代码块,每次使用如果都要重新写一遍,岂不是很麻烦,就算是“cv”大法,感觉也不是很方便,那么,有什么办法可以解决这个问题呢?方法!java中,一段可重用的,用于执行特定功能的代码块叫做方法,它可以接收参数、返回结果,并且可以被多次使用。一、方法的基本结构[修饰符]返回值类型方法名([参数列表])[throws异常类型]{//方法体}[throw
[Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
这些不会的
解释:这个错误是很常见的错误,错误的提示已经很清楚了就是java的Object数组不能转换成为String[]数组,这就说明你要转换的数组它本身是Object类型的数组,但是你却非要把它转换为String类的数组,这当然是错误的。示例:[java]viewplaincopypackagecom.dada;importjava.util.ArrayList;importjava.util.List;
HikariCP调试日志深度解析:生产环境故障排查完全指南
HikariCP调试日志深度解析:生产环境故障排查完全指南更新时间:2025年7月4日|作者:资深架构师|适用版本:HikariCP5.x+|难度等级:中高级前言在生产环境中,数据库连接池往往是系统性能的关键瓶颈。HikariCP作为当前最流行的Java连接池,其调试日志包含了丰富的运行时信息,能够帮助我们快速定位和解决各种连接池相关问题。本文将深入解析HikariCP的日志体系,提供一套完整的故
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
今年校招竞争真激烈
12_05
程序员满大街,都要找不到工作了。即使人工智能满大街,我也后悔当初没学机器学习,后悔当初没学Java。C++真难找工作。难道毕了业就失业吗?好担心!
【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力
房征劲Kendall
AsposeforJava:解锁无水印、无限制的文档处理能力【下载地址】AsposeforJava-去除水印和数量限制AsposeforJava-去除水印和数量限制Aspose是一个著名的文档处理库,专为Java应用程序设计,支持多种文档格式的操作,如Word、Excel、PDF等项目地址:https://gitcode.com/open-source-toolkit/56c82项目介绍在现代企业
微服务日志追踪,Skywalking接入TraceId功能
Victor刘
微服务 skywalking java
文章目录一、借助skywalking追加traceIdlogbacklog4j2效果二、让skywalking显示日志内容版本差异logback配置文件log4j2配置文件一、借助skywalking追加traceId背景:在微服务或多副本中难以观察一个链路的日志,需要通过唯一traceId标识来查找,下面介绍Skywalking-traceId在Java中的配置方法。介绍两种java日志的配置方
【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
笙囧同学
java 前端 状态模式
核心功能设计用户管理系统用户管理是整个系统的基础,我设计了完整的用户生命周期管理:用户注册流程验证失败验证通过验证失败验证通过用户名已存在用户名可用失败成功用户访问注册页面填写注册信息前端表单验证显示错误提示提交到后端后端数据验证返回错误信息用户名唯一性检查提示用户名重复密码加密处理保存用户信息保存成功?显示系统错误注册成功跳转登录页面登录认证机制深度解析我实现了一套企业级的多层次安全认证机制:认
Java:数据结构-ArrayList和顺序表(2)
blammmp
java 数据结构 开发语言
一ArrayList的使用1.ArrayList的构造方法第一种(指定容量的构造方法)创建一个空的ArrayList,指定容量为initialCapacity。publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCap
CMS垃圾回收器和G1垃圾回收器区别_g1cms垃圾回收器区别
2401_89191885
jvm
该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例;加载该类的ClassLoader已经被回收;该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。3.常见的垃圾回收算法1、Mark-Sweep(标记-清除算法):(1)思想:标记清除算法分为两个阶段,标记阶段和清除阶段。标记阶段任务是标记出所有需要回收的对象,清除阶段就是清除被标
每日面试题15:如何解决堆溢出?
℡余晖^
每日面试题 python 开发语言
在Java应用运行过程中,"java.lang.OutOfMemoryError:Javaheapspace"是最常见的错误之一。无论是高并发的电商大促场景,还是持续运行的后台服务,堆内存溢出都可能导致服务不可用、数据丢失,甚至引发系统崩溃。本文将结合实际排查经验,系统讲解堆溢出的底层逻辑、应急处理流程及长效预防策略。一、堆溢出的本质:内存分配的"收支失衡"Java堆是JVM管理的内存区域,用于存
记录自己第n次面试(n>3)
Warren98
Java 面试 python 职场和发展 java 开发语言 服务器 linux
1.Spring Boot可执行JAR的内存分配答:“在Spring Boot可执行JAR中,JVM的内存通常分为两大块:堆(Heap)和栈(Stack)。堆内存:存放对象实例和数组,通过-Xms(初始)和-Xmx(最大)控制。比如java-Xms512m-Xmx1024m-jarapp.jar,表示启动时给512 MB堆,最大可以到1 024 MB。栈内存:每个线程有独立的栈帧,用来保存方法调用
java封装继承多态等
麦田的设计者
java eclipse jvm c encapsulatopn
最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。
1、final关键字
译为:最终的
&
F5与集群的区别
bijian1013
weblogic 集群 F5
http请求配置不是通过集群,而是F5;集群是weblogic容器的,如果是ejb接口是通过集群。
F5同集群的差别,主要还是会话复制的问题,F5一把是分发http请求用的,因为http都是无状态的服务,无需关注会话问题,类似
LeetCode[Math] - #7 Reverse Integer
Cwind
java 题解 Math LeetCode Algorithm
原题链接:#7 Reverse Integer
要求:
按位反转输入的数字
例1: 输入 x = 123, 返回 321
例2: 输入 x = -123, 返回 -321
难度:简单
分析:
对于一般情况,首先保存输入数字的符号,然后每次取输入的末位(x%10)作为输出的高位(result = result*10 + x%10)即可。但
BufferedOutputStream
周凡杨
首先说一下这个大批量,是指有上千万的数据量。
例子:
有一张短信历史表,其数据有上千万条数据,要进行数据备份到文本文件,就是执行如下SQL然后将结果集写入到文件中!
select t.msisd
linux下模拟按键输入和鼠标
被触发
linux
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键 模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。
linux/in
ContentProvider初体验
肆无忌惮_
ContentProvider
ContentProvider在安卓开发中非常重要。与Activity,Service,BroadcastReceiver并称安卓组件四大天王。
在android中的作用是用来对外共享数据。因为安卓程序的数据库文件存放在data/data/packagename里面,这里面的文件默认都是私有的,别的程序无法访问。
如果QQ游戏想访问手机QQ的帐号信息一键登录,那么就需要使用内容提供者COnte
关于Spring MVC项目(maven)中通过fileupload上传文件
843977358
mybatis spring mvc 修改头像 上传文件 upload
Spring MVC 中通过fileupload上传文件,其中项目使用maven管理。
1.上传文件首先需要的是导入相关支持jar包:commons-fileupload.jar,commons-io.jar
因为我是用的maven管理项目,所以要在pom文件中配置(每个人的jar包位置根据实际情况定)
<!-- 文件上传 start by zhangyd-c --&g
使用svnkit api,纯java操作svn,实现svn提交,更新等操作
aigo
svnkit
原文:http://blog.csdn.net/hardwin/article/details/7963318
import java.io.File;
import org.apache.log4j.Logger;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmateso
对比浏览器,casperjs,httpclient的Header信息
alleni123
爬虫 crawler header
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
String type=req.getParameter("type");
Enumeration es=re
java.io操作 DataInputStream和DataOutputStream基本数据流
百合不是茶
java 流
1,java中如果不保存整个对象,只保存类中的属性,那么我们可以使用本篇文章中的方法,如果要保存整个对象 先将类实例化 后面的文章将详细写到
2,DataInputStream 是java.io包中一个数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
车辆保险理赔案例
bijian1013
车险
理赔案例:
一货运车,运输公司为车辆购买了机动车商业险和交强险,也买了安全生产责任险,运输一车烟花爆竹,在行驶途中发生爆炸,出现车毁、货损、司机亡、炸死一路人、炸毁一间民宅等惨剧,针对这几种情况,该如何赔付。
赔付建议和方案:
客户所买交强险在这里不起作用,因为交强险的赔付前提是:“机动车发生道路交通意外事故”;
如果是交通意外事故引发的爆炸,则优先适用交强险条款进行赔付,不足的部分由商业
学习Spring必学的Java基础知识(5)—注解
bijian1013
java spring
文章来源:http://www.iteye.com/topic/1123823,整理在我的博客有两个目的:一个是原文确实很不错,通俗易懂,督促自已将博主的这一系列关于Spring文章都学完;另一个原因是为免原文被博主删除,在此记录,方便以后查找阅读。
有必要对
【Struts2一】Struts2 Hello World
bit1129
Hello world
Struts2 Hello World应用的基本步骤
创建Struts2的Hello World应用,包括如下几步:
1.配置web.xml
2.创建Action
3.创建struts.xml,配置Action
4.启动web server,通过浏览器访问
配置web.xml
<?xml version="1.0" encoding="
【Avro二】Avro RPC框架
bit1129
rpc
1. Avro RPC简介 1.1. RPC
RPC逻辑上分为二层,一是传输层,负责网络通信;二是协议层,将数据按照一定协议格式打包和解包
从序列化方式来看,Apache Thrift 和Google的Protocol Buffers和Avro应该是属于同一个级别的框架,都能跨语言,性能优秀,数据精简,但是Avro的动态模式(不用生成代码,而且性能很好)这个特点让人非常喜欢,比较适合R
lua set get cookie
ronin47
lua cookie
lua:
local access_token = ngx.var.cookie_SGAccessToken
if access_token then
ngx.header["Set-Cookie"] = "SGAccessToken="..access_token.."; path=/;Max-Age=3000"
end
java-打印不大于N的质数
bylijinnan
java
public class PrimeNumber {
/**
* 寻找不大于N的质数
*/
public static void main(String[] args) {
int n=100;
PrimeNumber pn=new PrimeNumber();
pn.printPrimeNumber(n);
System.out.print
Spring源码学习-PropertyPlaceholderHelper
bylijinnan
java spring
今天在看Spring 3.0.0.RELEASE的源码,发现PropertyPlaceholderHelper的一个bug
当时觉得奇怪,上网一搜,果然是个bug,不过早就有人发现了,且已经修复:
详见:
http://forum.spring.io/forum/spring-projects/container/88107-propertyplaceholderhelper-bug
[逻辑与拓扑]布尔逻辑与拓扑结构的结合会产生什么?
comsci
拓扑
如果我们已经在一个工作流的节点中嵌入了可以进行逻辑推理的代码,那么成百上千个这样的节点如果组成一个拓扑网络,而这个网络是可以自动遍历的,非线性的拓扑计算模型和节点内部的布尔逻辑处理的结合,会产生什么样的结果呢?
是否可以形成一种新的模糊语言识别和处理模型呢? 大家有兴趣可以试试,用软件搞这些有个好处,就是花钱比较少,就算不成
ITEYE 都换百度推广了
cuisuqiang
Google AdSense 百度推广 广告 外快
以前ITEYE的广告都是谷歌的Google AdSense,现在都换成百度推广了。
为什么个人博客设置里面还是Google AdSense呢?
都知道Google AdSense不好申请,这在ITEYE上也不是讨论了一两天了,强烈建议ITEYE换掉Google AdSense。至少,用一个好申请的吧。
什么时候能从ITEYE上来点外快,哪怕少点
新浪微博技术架构分析
dalan_123
新浪微博 架构
新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版的架构实际上就是这两行字。第
玩转ARP攻击
dcj3sjt126com
r
我写这片文章只是想让你明白深刻理解某一协议的好处。高手免看。如果有人利用这片文章所做的一切事情,盖不负责。 网上关于ARP的资料已经很多了,就不用我都说了。 用某一位高手的话来说,“我们能做的事情很多,唯一受限制的是我们的创造力和想象力”。 ARP也是如此。 以下讨论的机子有 一个要攻击的机子:10.5.4.178 硬件地址:52:54:4C:98
PHP编码规范
dcj3sjt126com
编码规范
一、文件格式
1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。例如:<?php$foo = 'foo';2. 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。例
linux 脱机管理(nohup)
eksliang
linux nohup nohup
脱机管理 nohup
转载请出自出处:http://eksliang.iteye.com/blog/2166699
nohup可以让你在脱机或者注销系统后,还能够让工作继续进行。他的语法如下
nohup [命令与参数] --在终端机前台工作
nohup [命令与参数] & --在终端机后台工作
但是这个命令需要注意的是,nohup并不支持bash的内置命令,所
BusinessObjects Enterprise Java SDK
greemranqq
java BO SAP Crystal Reports
最近项目用到oracle_ADF 从SAP/BO 上调用 水晶报表,资料比较少,我做一个简单的分享,给和我一样的新手 提供更多的便利。
首先,我是尝试用JAVA JSP 去访问的。
官方API:http://devlibrary.businessobjects.com/BusinessObjectsxi/en/en/BOE_SDK/boesdk_ja
系统负载剧变下的管控策略
iamzhongyong
高并发
假如目前的系统有100台机器,能够支撑每天1亿的点击量(这个就简单比喻一下),然后系统流量剧变了要,我如何应对,系统有那些策略可以处理,这里总结了一下之前的一些做法。
1、水平扩展
这个最容易理解,加机器,这样的话对于系统刚刚开始的伸缩性设计要求比较高,能够非常灵活的添加机器,来应对流量的变化。
2、系统分组
假如系统服务的业务不同,有优先级高的,有优先级低的,那就让不同的业务调用提前分组
BitTorrent DHT 协议中文翻译
justjavac
bit
前言
做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍。
BEP: 5Title: DHT ProtocolVersion: 3dec52cb3ae103ce22358e3894b31cad47a6f22bLast-Modified: Tue Apr 2 16:51:45 2013 -070
Ubuntu下Java环境的搭建
macroli
java 工作 ubuntu
配置命令:
$sudo apt-get install ubuntu-restricted-extras
再运行如下命令:
$sudo apt-get install sun-java6-jdk
待安装完毕后选择默认Java.
$sudo update- alternatives --config java
安装过程提示选择,输入“2”即可,然后按回车键确定。
js字符串转日期(兼容IE所有版本)
qiaolevip
TO Date String IE
/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)
* result (分钟)
*/
stringToDate : function(fDate){
var fullDate = fDate.split(" ")[0].split("-");
var fullTime = fDate.split("
【数据挖掘学习】关联规则算法Apriori的学习与SQL简单实现购物篮分析
superlxw1234
sql 数据挖掘 关联规则
关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。
关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。
例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%] 支持度3%:意味3%顾客同时购买牛奶和面包。 置信度40%:意味购买牛奶的顾客40%也购买面包。 规则的支持度和置信度是两个规则兴
Spring 5.0 的系统需求,期待你的反馈
wiselyman
spring
Spring 5.0将在2016年发布。Spring5.0将支持JDK 9。
Spring 5.0的特性计划还在工作中,请保持关注,所以作者希望从使用者得到关于Spring 5.0系统需求方面的反馈。