首页
关于
友链
Search
1
wlop 4K 壁纸 4k8k 动态 壁纸
1,533 阅读
2
Nacos持久化MySQL问题-解决方案
968 阅读
3
Docker搭建Typecho博客
767 阅读
4
滑动时间窗口算法
758 阅读
5
Nginx反向代理微服务配置
722 阅读
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
登录
Search
标签搜索
java
javase
docker
java8
springboot
thread
spring
分布式
mysql
锁
linux
redis
源码
typecho
centos
git
map
RabbitMQ
lambda
stream
少年
累计撰写
189
篇文章
累计收到
25
条评论
首页
栏目
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
页面
关于
友链
搜索到
53
篇与
的结果
2022-02-28
Google Nexus私服搭建
第一步骤:下载nexus私服软件nexus-2.12.0-01-bundle第二不:安装进入nexus解压目录进入到bin目录:1、安装:执行nexus.bat install 2、启动:nexus.bat start第三步:查看访问路径进入config目录,打开nexus.properties即可看到端口号,项目命令nexus。第四步:浏览器打开http://127.0.0.1:8081/nexus/默认登录账号:admin/admin123
2022年02月28日
300 阅读
0 评论
2 点赞
2022-02-28
Maven
使用maven的好处:大型项目的好处,建立一个父项目,各组或部门可以模块开发,不用拉取整个项目进行开发。创建maven项目说明:maven项目结构:Maven常用命令:1、一键构建项目命令:mvn tomcat:run注意:该命令使用的是tomcat插件进行运行的,不需要单独安装配置tomcat。2、清理编译好后的文件(target文件夹及里面所有的文件):mvn clean3、编译并运行了main里面的代码(只编译main主文件里面的java代码,test里面的java代码不编译不编译):mvn compile4、编译并运行了test里面的代码(只编译test里面的java代码,main里面的java代码不编译):mvn test5、打包,并将包放到tager文件夹下面。打成war或jar名称由POM文件里面的这3个标签值决定:例如打包成这个名字:HelloWorld-0.0.2-SNAPASHOT.warHelloWorld --打成包的名字0.0.2-SNAPASHOT --版本war --什么类型的包mvn package6、把项目发布到本地仓库mvn install同时运行了mvn compile、mvn test、mvn package、mvn install、mvn deploy命令。7、jar或war包发布到私服上mvn deploymaven生命周期有三种:1、clean生命周期:clean2、default生命周期:compile、test、package、install、deploy命令3、site生命周期:site(生成项目的文档说明)不同的生命周期,命令可以同时运行。maven依赖范围:complieprovided:编译(complie)时需要、测试时也需要、运行时不需要,打包时不需要runtime:例如:数据库驱动包test:编译时不需要,测试时需要、运行时不需要maven添加插件:常见问题:出现该提示表示jdk安装有问题,重新安装即可。maven整体模型也就是上面说的内容:版本冲突解决原则:1、路径近者原则(比如2个坐标中有不同版本的相同的jar包,自己在加入要使用的版本的这个名称的坐标)2、第一声明有限原则(比如2个坐标,谁排在pom.xml文件的前面就用谁的)3、排除原则.(将名字和组织加入到exclusion中)4、版本锁定谁先传递锁定的版本,就用这个。可以同时锁定多个版本锁定版本里面使用${sprint.verion}注意上面锁定了,坐标里面的version就没有了,可以去除,就算不去除也没有了。
2022年02月28日
216 阅读
0 评论
0 点赞
2022-02-28
JAVA map遍历
Map集合的2种循环方式。一种是通过map.entrySet()。另一种是map.keySet()。所有的集合都可以通过迭代器Iterator,进行遍历。package learn.javase; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * 重要 * 遍历map的两种方式map.entrySet() map.keySet() * @author Jole * */ public class MapDemo { public static void main(String[] args) { Map<Integer ,String > map = new HashMap(); map.put(1, "111"); map.put(2, "2222"); //方式一 entrySet() Set<Map.Entry <Integer, String>> sets = map.entrySet(); //获取值1,通过for for(Map.Entry <Integer, String> entry : sets) { System.out.println("ssss:"+entry); System.out.println("key:"+entry.getKey()+"value:"+entry.getValue()); } //获取值2,通过iterator Iterator <Map.Entry <Integer, String>> itt = sets.iterator(); while(itt.hasNext()) { Map.Entry <Integer, String> entrys = itt.next(); System.out.println(entrys.getKey()+"----"+entrys.getValue()); } System.out.println(map.put(3, "222")); //方式二 keySet() Set<Integer> set = map.keySet(); Iterator it = set.iterator(); while(it.hasNext()) { System.out.println("Iterator="+it.next()); System.out.println("key:"+map.get(it.next())); } for(Integer in : set) { System.out.println(in); } } }
2022年02月28日
311 阅读
0 评论
2 点赞
2022-02-28
Scanner和Random类
Java的两个引用输入类型Scanner、Random类,Scanner用于接收键盘输入,Random用户产生随机数。引用类型也就是Sun公司为我们写好的类,我们直接使用就可以了。1、引用数据类型的使用导入包:知道用的这个类,在jdk的那个目录那个文件下。创建对象:格式, 类 对象 = new 类型();如何使用: 对象.类的方法()引用数据类型的使用与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式,如下:数据类型 变量名 = new 数据类型();每种引用数据类型都有其方法,我们可以调用该类型实例的方法。变量名.方法名();2、Scanner类Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。导包import java.util.Scanner;创建对象实例Scanner sc = new Scanner(System.in);调用方法//用来接收控制台录入的数字 int i = sc.nextInt(); //用来接收控制台录入的字符串 String s = sc.next(); Scanner使用Demo:package java_learn_code; //导入包,指明类所在的的文件见,关键字import import java.util.Scanner; /** * 引用数据类型,使用步骤:1、导入包 。2、创建对象 3、通过对象调用方法 * @author Jole * Scanner的使用,所在目录java文件见-util文件夹 */ public class ScannerDemo { public static void main(String[] args) { System.out.print("请输入整数内容:"); //类型 变量名 = new 类型(); //创建出scanner,类变量 Scanner scan = new Scanner(System.in); //变量.功能方法,接受键盘输入 //功能:nextint()接受键盘输入的是整数 String str = scan.next(); System.out.println("\n您输入的内容是:"+str+1); } }3、Random类Random类也是属于引用类型,用于产生随机数的。Random类可以产生多种数据类型的随机数,在这里我们主要介绍生成整数与小数的方式。//用于产生[0,maxValue)范围的随机整数,包含0,不包含maxValue; public int nextInt(int maxValue) //用于产生[0,1)范围的随机小数,包含0.0,不包含1.0。 public double nextDouble()Random使用方式:import导包:所属包java.util.Random创建实例格式:Random 变量名 = new Random();Random类使用,产生随机整数、浮点数: package java_learn_code; //导入类所在的包,知道sun为我们写好的类所在位置 import java.util.Random; import java.util.stream.DoubleStream; /** * 随机数类Random引用类型的使用,产生随机整数\浮点数 * 使用步骤:1、导入包 2、创建对象 3、通过对象.方法() 进行使用 * 随机数,都是伪随机数,因为都是人编写的算法,而产生的随机数 */ public class RandomDemo { public static void main(String[] args) { //创建Random对象 Random ran = new Random(); //产生随机整数 //调用对象的方法nexInt(),产生整数,加参数表示产生0-参数内的整数 //注释不包含参数本身,例如nextInt(100),表示产生0-99中的整数。 int i = ran.nextInt(100); System.out.println(i); //产生随机浮点数 Random random = new Random(); double d =random.nextDouble(); System.out.println(d); } }注意:随机数,都是伪随机数,因为都是人编写的算法,而产生的随机数。
2022年02月28日
219 阅读
0 评论
0 点赞
2022-02-28
JAVA Socket TCP多线程文件上传
通过Java Socket编程,实现多线程文件上传。主要涉及ServerScoket服务端、Socket客户端、IO流操作、多线线程。客户端:package learn.javase.Update; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; /** * 利用TCP的Socket\ServerSocket客户端向服务器上传文件 * 客户端 * @author Jole * */ public class UpClent { public static void main(String[] args) throws IOException{ Socket socket = new Socket("127.0.0.1",8888); OutputStream out = socket.getOutputStream(); //读取本地文件,并通过out输出流,发送给服务端 File file = new File("J:"+File.separator+"wxhandbook-master.zip"); FileInputStream in = new FileInputStream(file); byte[] data = new byte[1024]; int len =0; while((len=in.read(data))!=-1) { out.write(data, 0, len); } socket.shutdownOutput(); //获取服务器返回信息 InputStream info = socket.getInputStream(); int infoSize=info.read(data); System.out.println(new String(data, 0, infoSize)); info.close(); socket.close(); } } 多线程实现类:package learn.javase.Update; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; /** * 改造为多线程,服务端 * @author Jole * */ public class UpServerThread implements Runnable{ private Socket socket; public UpServerThread(Socket socket) { this.socket = socket; } @Override public void run() { try { //获取客户端输入流 InputStream in = socket.getInputStream(); //判断文件夹是否存在,不存在则新建 File file = new File("H:\\up"); if(!file.exists()) { file.mkdir(); } //设置文件名规则 String fileName = System.currentTimeMillis()+"_"+new Random().nextInt(9999)+".zip"; FileOutputStream out = new FileOutputStream(file+File.separator+fileName); //读取客户端发送数据,并写入到H:\\up文件夹下面 byte[] data = new byte[1024]; int len = 0; while((len=in.read(data))!=-1) { out.write(data, 0, len); } //返回消息给客户端,上传成功信息 OutputStream outInfo = socket.getOutputStream(); outInfo.write("上传成功".getBytes()); outInfo.close(); out.close(); socket.close(); }catch(Exception e) { e.printStackTrace(); } } } 服务端线程启动类:package learn.javase.Update; import java.net.ServerSocket; import java.net.Socket; /** * 启动服务器多线程 * @author Jole * */ public class UpServerMainThread { public static void main(String[] args) throws Exception{ ServerSocket server = new ServerSocket(8888); while(true) { Socket socket = server.accept(); new Thread(new UpServerThread(socket)).start(); } } }
2022年02月28日
302 阅读
0 评论
1 点赞
2022-02-28
JAVA Socket UDP实现聊天
通过Socket网络编程,UDP实现简单聊天。主要涉及DatagramSocket进行数据传输、DatagramPacket进行数据包封装,2个类。发送端:package learn.javase.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; /** * 控制台输入;实现聊天。 * 发送方 * @author Jole * */ public class UdpSend { public static void main(String[] args) throws Exception{ Scanner scan = new Scanner(System.in); InetAddress ia = InetAddress.getByName("192.168.1.4"); DatagramSocket socket = new DatagramSocket(); while(true) { String chatInfo = scan.nextLine(); byte[] info = chatInfo.getBytes(); DatagramPacket pack = new DatagramPacket(info, info.length, ia, 6000); socket.send(pack); } } } 接收端:package learn.javase.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * UDP:接收方 * @author Jole * */ public class UdpReceive { public static void main(String[] args) throws Exception{ DatagramSocket socket = new DatagramSocket(6000); byte[] info = new byte[1024]; while(true) { DatagramPacket pack = new DatagramPacket(info, info.length); socket.receive(pack); InetAddress ia = pack.getAddress(); System.out.println(ia.getHostName()+"-"+pack.getPort()+":"+new String(info,0,pack.getLength())); } } }
2022年02月28日
225 阅读
0 评论
1 点赞
2022-02-28
DBUtils进行数据库CRUD
通过读取properties获取链接数据库信息,利用apache开源数据库操作工具包DBUtils进行数据库CRUD操作。properties文件:driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=root password=11111通过dbutils自定义获取数据库连接对象:package learn.javase.jdbc; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; public class JdbcUtils{ private static Connection conn; private static String driverClass; private static String url; private static String user; private static String password; static { try { getReadConfig(); Class.forName(driverClass); conn = DriverManager.getConnection(url, user, password); }catch(Exception e) { new RuntimeException("链接数据库失败!"); } } private static void getReadConfig() throws Exception{ InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties pro = new Properties(); pro.load(in); driverClass =pro.getProperty("driverClass"); url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); } public static Connection getConnection() { return conn; } } 使用工具包中的QueryRunner进行数据库的CRUD操作:package learn.javase.jdbc; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; /** * 利用apatche的DBUtils工具包,添加\修改\删除数据 * @author Jole * */ public class DbUtilsDemo { private static Connection conn = JdbcUtils.getConnection(); private static QueryRunner qr = new QueryRunner(); public static void main(String[] args) throws Exception{ // insert(); // update(); delte(); } public static void insert() throws SQLException{ String sql = "insert into my_user(u_id,u_name,u_age) values(11111,'inster',10)"; Object[] param = {}; int n = qr.update(conn, sql, param); System.out.println(n); DbUtils.close(conn); } public static void update() throws SQLException{ String sql ="update my_user set u_name=? ,u_age=? where u_id=?"; Object[] param = {"ceshi",1000,11111}; int n = qr.update(conn, sql, param); DbUtils.close(conn); System.out.println(n); } public static void delte() throws SQLException{ String sql = "delete from my_user where u_id=?"; int n = qr.update(conn, sql, 11111); DbUtils.close(conn); System.out.println(n); } } 封装QueryRunner返回结果成对象:要封装成的对象Userpackage learn.javase.jdbc; public class User { private String u_id; private String u_name; private String u_age; public String getU_id() { return u_id; } public void setU_id(String u_id) { this.u_id = u_id; } public String getU_name() { return u_name; } public void setU_name(String u_name) { this.u_name = u_name; } public String getU_age() { return u_age; } public void setU_age(String u_age) { this.u_age = u_age; } public User() { super(); // TODO Auto-generated constructor stub } public User(String u_id, String u_name, String u_age) { super(); this.u_id = u_id; this.u_name = u_name; this.u_age = u_age; } @Override public String toString() { return "User [u_id=" + u_id + ", u_name=" + u_name + ", u_age=" + u_age + "]"; } } 根据返回结果,通过实现ResultHandler接口的实现类,封装对象:package learn.javase.jdbc; import java.sql.Connection; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; /** * 利用开源apache的commons-dbutils-1.7.jar的QueryRunner封装数据 * @author Jole * */ public class QueryRunnerDemo01 { public static final Connection conn = JdbcUtils.getConnection(); public static final QueryRunner qr = new QueryRunner(); public static void main(String[] args) throws Exception { // TODO Auto-generated method stub // getInfo(); // getInfo2(); // getInfo3(); // getInfo4(); // getInfo5(); // getInfo6(); // getInfo7(); getInfo8(); } //ArrayHandler 第一行 public static void getInfo() throws Exception{ String sql ="select * from my_user"; Object[] rs = qr.query(conn, sql, new ArrayHandler()); for(Object obj : rs) { System.out.print(obj + "\t"); } } //ArrayListHandler 所有记录 public static void getInfo2() throws Exception{ String sql ="select * from my_user"; List<Object[]> rs = qr.query(conn, sql, new ArrayListHandler()); for(Object[] objs : rs) { for(Object obj : objs) { System.out.print(obj + "\t"); } System.out.println(); } } //javaBean 第一行封装成对象 public static void getInfo3() throws Exception{ String sql ="select * from my_user"; User user = qr.query(conn, sql, new BeanHandler<User>(User.class)); System.out.println(user); } //javaBean 所有记录封装成对象 public static void getInfo4() throws Exception{ String sql ="select * from my_user"; List<User> userList = qr.query(conn, sql, new BeanListHandler<User>(User.class)); for(User user : userList) { System.out.println(user); } } //ColumnListHandler所有记录的某列值 public static void getInfo5() throws Exception{ String sql ="select * from my_user"; List<Object> list = (List<Object>) qr.query(conn, sql, new ColumnListHandler("u_name")); for(Object obj : list) { System.out.println(obj); } } //ScalarHandler返回单个值 public static void getInfo6() throws Exception{ String sql ="select count(*) from my_user"; Long count = qr.query(conn, sql, new ScalarHandler<Long>()); System.out.println(count); } //MapHandler将第一行数据封到map中 public static void getInfo7() throws Exception{ String sql ="select * from my_user"; Map<String, Object> map = qr.query(conn, sql, new MapHandler()); Set<String> set =map.keySet(); for(String key : set) { System.out.println(key+" "+map.get(key)); } } //MapListHandler将所有数据封到list中的map中 public static void getInfo8() throws Exception{ String sql ="select * from my_user"; List<Map<String, Object>> list= qr.query(conn, sql, new MapListHandler()); for(Map<String, Object> map : list) { for(String key : map.keySet()) { System.out.print(key+" "+ map.get(key)); } System.out.println(); } } } 主要涉及的jar包:commons-dbutils-1.7.jar(基本的CRUD)、mysql-connector-java-5.1.37-bin.jar(数据库连接驱动)
2022年02月28日
364 阅读
0 评论
1 点赞
2022-02-28
DBCP连接池
使用dbcp连接池,进行数据库的CRUD,涉及jar包:commons-dbcp2-2.8.0.jar(连接池包)、commons-pool2-2.9.0.jar(dbcp依赖该包)、commons-logging-1.2.jar(接口日志包)、mysql-connector-java-5.1.37-bin.jar(数据库连接驱动)、commons-dbutils-1.7.jar(基本CRUD操作)DbcpUtils数据库连接池配置:package learn.javase.dbcppool; import org.apache.commons.dbcp2.BasicDataSource; /** * 利用DBCP链接数据库 * @author Jole * */ public class DbcpUtils { private static BasicDataSource dataSource = new BasicDataSource(); static { //必配参数 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("11111"); //可配参数 dataSource.setInitialSize(10); dataSource.setMaxIdle(8); dataSource.setMinIdle(2); } public static BasicDataSource getConnecton() { return dataSource; } } 利用DbcpUtils进行数据库的CRUD操作:package learn.javase.dbcppool; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; /** * 利用DBCP数据库连接池增加、查询 * @author Jole * */ public class DbcpUtilsDemo { private static QueryRunner qr = new QueryRunner(DbcpUtils.getConnecton()); public static void main(String[] args) { // TODO Auto-generated method stub // insertData(); findData(); } public static void insertData() { String sql = "insert into my_user(u_id,u_name,u_age) values(?,?,?)"; Object[] params = {"777777","dbcpUTils",30}; try { int num = qr.update(sql, params); System.out.println(num); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void findData() { String sql = "select * from my_user"; try { List<List<Object[]>> objs = qr.execute(sql, new ArrayListHandler()); for(List<Object[]> obj : objs ) { for(Object ob : obj) { System.out.println(ob); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 除了DBCP数据库连接池外,还有目前比较常用的c3p0、Druid等数据库链接池。
2022年02月28日
301 阅读
1 评论
1 点赞
2022-02-28
JAVA原生JDBC操作
利用JAVA原生JDBC进行数据库的CRUD操作。简单记录一下。package learn.javase.jdbc; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; import java.sql.PreparedStatement; import java.sql.Connection; /** * jdbc使用 * @author Jole * */ public class MyDriver { public static void main(String[] args) throws ClassNotFoundException, SQLException{ //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接对象 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "111111"; Connection conn = DriverManager.getConnection(url, user, password); // System.out.println(conn); //3.获取连接平台的执行对象 // Statement st = conn.createStatement(); //4.执行sql,返回行数 //executeUpdate():增删改 //String sql = "insert into user(user_id,user_name,user_password) values('1320442338427273213','zss','12')"; //int n = st.executeUpdate(sql); Scanner scan = new Scanner(System.in); String name = scan.nextLine(); int age = scan.nextInt(); //为了防止sql注入攻击和提高效率,使用Statement的子类,进行预编译 //executeQuery():查询 String sql = "select * from my_user where u_name=? and u_age=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setObject(1, name); ps.setObject(2, age); System.out.println(sql); ResultSet rs = ps.executeQuery(); //5.处理结果 while(rs.next()) { System.out.println(rs.getString("u_name")+ " " + rs.getString("u_age")); } //6.释放资源 rs.close(); ps.close(); conn.close(); } }
2022年02月28日
322 阅读
0 评论
2 点赞
1
...
4
5
6