文章目录
前言
一、简单项目的创建
二、常用依赖的引入
三、常用配置的编写
四、逆向工程的使用
五、常用类的编写
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)
线上java程序CPU占用过高问题排查
低调_0c1d
top命令查看CPU、内存等使用情况top定位问题线程ps-mppid-oTHREAD,tid,time[root@web-test~]#ps-mp12571-oTHREAD,tid,timeps-mp17480-oTHREAD,tid,timeUSER%CPUPRISCNTWCHANUSERSYSTEMTIDTIMEroot0.5------10:29:26root0.019-futex_--8
【ruoyi-vue】前后端分离项目分析
【ruoyi-vue】前后端分离项目分析【一】介绍【1】简介【2】主要特性【3】内置功能【4】后端文件结构【二】基础功能【1】上传下载【2】事务管理【3】异常处理【4】自定义注解校验:Xxs注解【5】数据脱敏【三】后台扩展【一】介绍【1】简介RuoYi-Vue是一个JavaEE企业级快速开发平台,基于经典技术组合(SpringBoot、SpringSecurity、MyBatis、Jwt、Vue)
实体类序列化报错:Caused by: java.lang.NoSuchMethodException: com.xx.PoJo$Item.<init>()
DN金猿
java 开发语言
原实体类代码@EqualsAndHashCode(callSuper=true)@DatapublicclassPojoextendsBaseBean{privatestaticfinallongserialVersionUID=-4291335073882689552L;@ApiModelProperty("")privateIntegerid;......privateListlist;@Al
前后端分离式项目架构流程(爆肝三万字)
信计2102罗铠威
javaEE系列专栏 前后端分离式架构 servlet 后端 前端框架 项目开发流程
文章目录个人主页:信计2102罗铠威JavaEE系列专栏前言:【前端】先创建Vue-cli项目,请选择此项目【创建路由】打开命令行工具,进入你的项目目录,输入下面命令。1.创建router目录~创建index.js文件,在其中配置路由2.在APP.vue中添加路由视图3.在main.js中配置路由【配置ElementUI】【如何使背景图片最大自适应】【登录组件模板】【注册组件模板】【创建后端项目+
响应式编程入门教程第四节:响应式集合与数据绑定
吉良吉影NeKoSuKi
unity 游戏引擎 c# 开发语言 架构
响应式编程入门教程第一节:揭秘UniRx核心-ReactiveProperty-让你的数据动起来!响应式编程入门教程第二节:构建ObservableProperty<T>—封装ReactiveProperty的高级用法响应式编程入门教程第三节:ReactiveCommand与UI交互响应式编程入门教程第四节:响应式集合与数据绑定响应式编程入门教程第五节:Unity生命周期与资源管理中的响应式编程在
Java单例模式:饿汉式VS懒汉式
概要单例模式是Java设计模式中最常用的模式之一,确保一个类只有一个实例,并提供一个全局访问点。下面结合您提供的代码,详细讲解饿汉式和懒汉式单例模式的区别与实现。饿汉式单例模式(EagerInitialization)特点类加载时就创建实例(急切初始化)线程安全(由JVM类加载机制保证)简单直接,但可能造成资源浪费(即使不用也会创建实例)代码实现publicclassSingleton{//类加载
JavaScript实现按键精灵(附完整源码)
源代码大师
JavaScript实战教程 javascript 开发语言 ecmascript
JavaScript实现按键精灵以下是使用JavaScript实现按键精灵游戏的完整源代码:按键精灵
JAVA JVM对象的实现
virtuoso_liu
JVM jvm java 开发语言
jvm分配内存给对象的方式1.内存分配的总体流程对象内存分配的主要步骤:类加载检查:确认类已加载、解析和初始化。内存分配:根据对象大小,从堆中划分内存空间。内存初始化:将分配的内存空间初始化为零值(不包括对象头)。设置对象头:填充对象头信息(如哈希码、GC分代年龄、类型指针等)。执行init方法:调用对象的构造函数,初始化成员变量。2.内存分配的具体方式(1)指针碰撞(BumpthePointer
JAVA 设计模式 代理
virtuoso_liu
JavaEE 设计模式 java 设计模式 代理模式
代理设计模式是一种结构型设计模式,它允许通过代理对象控制对另一个对象(即目标对象)的访问。这种模式在不改变目标对象代码的前提下,为其提供额外的功能或控制。代理模式的核心组件接口(Subject):定义目标对象和代理对象的共同行为。目标对象(RealSubject):实现接口的具体对象,是代理对象所代表的真实对象。代理对象(Proxy):持有目标对象的引用,并实现与目标对象相同的接口,在调用目标对象
java new date()初始化_java.sql.date 初始化
java程序操作sqlservercrud介绍(增、删、改、查操作)...Java数据库编程_第3章_基本SQL语句_计算机软件及应用_IT/计算机_专业资料。第三章基本SQL语句回顾?如何创建数据库?如何创建表结构?数据类型和约束?什么是......并在java程序中创建myclass数据库表,当然也可以直打开在ACCess,创建数据库,创建数据库表*/importjava.sql.*;//引入
JavaScript:冒泡排序
爱学习的小丫
什么是冒泡排序?经常看到这个名字,但是并不是什么了解,到底什么是冒泡排序。其实很简单,就是在一个数组中,分别让每一位与自己的下一位做对比,如果比后面的数小,则不变位置,如果比后面的数大,则调换两个数的位置,直至把最大的那个数调到最后一个,就好像冒泡一样,最大的数冒出来了。这样我们就可以通过这个方法,循环冒泡,直至这个数组的数进行升序或降序排列。举个例子说明升序冒泡://如果有这样一个数组,里面有一
dubbo与zookeeper
中庸逍遥
1.什么是DubboDubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1.1架构1.2节点角色说明:Provider:暴露服务的服务提供方(生产者)Consumer:调用远程服务的服务消费方(消费者)Registry:服务注册与发现的注册中心(例如:zookeeper)Monitor:统计服务的调用次数
Java安全:SpringBoot项目中Fastjson组件的使用与安全实践
rockmelodies
java安全 java 安全 spring boot
前言Fastjson是阿里巴巴开源的一个高性能JavaJSON库,广泛用于Java对象的序列化和反序列化操作。在SpringBoot项目中,Fastjson常被用作JSON处理工具。然而,Fastjson因其高性能而广受欢迎的同时,也因多次爆出的安全漏洞而备受关注。本文将介绍如何在SpringBoot项目中正确使用Fastjson,并讨论相关的安全实践。一、SpringBoot项目中集成Fastj
Spring AI 函数调用(Function Call)系统设计方案
大树~~
AI应用开发 spring 人工智能 数据库 SpringAI Function Call
一、系统概述与设计目标1.1核心目标从零构建一个灵活、安全、高效的函数调用系统,使大语言模型能够在对话中调用应用程序中的方法,同时保持良好的开发体验和企业级特性。1.2主要功能需求支持通过注解将普通Java方法标记为可被AI调用的函数自动生成符合LLM要求的函数描述和参数定义安全地解析和执行模型的函数调用请求处理并返回执行结果给模型提供扩展点以支持不同LLM提供商的特定实现1.3设计原则开发便捷性
spring的AnnotatedBeanDefinitionReader类
https://docs.spring.io/spring-framework/docs/6.1.3/javadoc-api/org/springframework/context/annotation/AnnotatedBeanDefinitionReader.htmlorg.springframework.context.annotation.AnnotatedBeanDefinitionRe
大前端几种开发语言对比
Fighting Horse
开发语言 flutter swift kotlin
项目概述语言特性备注基本类型BasicOperators整数、浮点数C++整数类型宽度不固定,如int,自动数值类型转换Java没有无符号整数,存在装箱Box类型C#Swift基本tuple类型KotlinT?是Box的支持原生类型数组IntArray等无符号整数是Beta的,通过内联类实现Dart运算符BasicOperators赋值、流程、算术、位、逻辑、关系运算符下标、后缀、前缀运算符三元条
DDD核心知识解析
我是廖志伟
Java场景面试宝典 DDD Domain-Driven Design Software Architecture
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
ShardingSphere详解
我是廖志伟
Java场景面试宝典 ShardingSphere Distributed Database Middleware
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
微服务架构核心技术
我是廖志伟
Java场景面试宝典 Service Governance Microservices Distributed Systems
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
Spring MVC 技术解析
我是廖志伟
Java场景面试宝典 Spring MVC Java Web MVC Design Pattern
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
领域驱动设计核心解析
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
Spring技术全解析
我是廖志伟
Java场景面试宝典 Spring Framework IoC Container AOP
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
并发编程核心技术
我是廖志伟
Java场景面试宝典 Concurrency Java Multithreading
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
ShardingSphere技术解析
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
并发编程与MyBatis核心解析
我是廖志伟
Java场景面试宝典 Concurrent Programming Java MyBatis
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
互联网大厂java求职者面试
我是廖志伟
Java场景面试宝典 java 八股文 面试 求职 Java
我是廖志伟,一名Java开发工程师,清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Z
思途JAVA学习0716
Asu5202
java idea
1.环境设置Java开发需要安装JDK(JavaDevelopmentKit),它包含JRE(JavaRuntimeEnvironment)和开发工具。设置环境变量是关键步骤:JAVA_HOME:指向JDK安装目录,例如C:\ProgramFiles\Java\jdk-21。Path:添加%JAVA_HOME%\bin,以便在命令行中直接使用java和javac命令。验证安装:在命令行输入java
什么是java
IT界小新学姐
Java属于一种计算机语言,计算机语言的种类非常多,总的来说可以分成机器语言、汇编语言、高级语言三大类。Java是一种高级计算机语言。Java是由SunMicrosystems在1995年首先发布的编程语言和计算平台。有许多应用程序和Web站点只有在安装Java后才能正常工作,而且这样的应用程序和Web站点日益增多。Java快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从
ShardingSphere 架构解析
我是廖志伟
Java场景面试宝典 Database Distributed Systems ShardingSphere
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
Java零基础-三维数组详解!
喵手
零基础学Java java 开发语言
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式
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系统需求方面的反馈。