首页
归档
关于
Search
1
C服务器端
9 阅读
2
1.数据流图(下午题)
8 阅读
3
管道处理模型
8 阅读
4
数据结构与算法
8 阅读
5
3.面向对象设计
7 阅读
软件设计师笔记
.Net
Java
数据库
PHP
运维
前端
Python
中间件相关
云原生
架构设计
Search
标签搜索
websocket
科技新闻
Bi8bo
累计撰写
267
篇文章
累计收到
2
条评论
首页
栏目
软件设计师笔记
.Net
Java
数据库
PHP
运维
前端
Python
中间件相关
云原生
架构设计
页面
归档
关于
搜索到
267
篇与
的结果
2025-04-03
uniapp 引入第三方UI框架
项目下新建 project.config.json 文件添加{"miniprogramRoot": "unpackage/dist/dev/mp-weixin/" }
2025年04月03日
5 阅读
0 评论
0 点赞
2025-04-03
uni-app中引入vant weapp方法
1、我们到https://github.com/youzan/vant-weapp下载最新的压缩包2、在自己项目的根目录创建wxcomponents>vant,然后将压缩包内的dist文件夹直接拷入vant文件中,格式如下图(不是必须这样做,只是为了文件目录结构清晰)3、在根目录下App.vue中引入index.wxss,如下图@import "/wxcomponents/vant/dist/common/index.wxss"; 4、在pages.json页面将vant的组件注册到对应的页面,参考https://youzan.github.io/vant-weapp/#/intro页面的组件配置方法如下图"usingComponents": { "van-row": "/wxcomponents/vant/dist/row/index", "van-col": "/wxcomponents/vant/dist/col/index", "van-icon": "/wxcomponents/vant/dist/icon/index", "van-button": "/wxcomponents/vant/dist/button/index" } 5、现在,即可在配置好的页面使用当前组件<van-button icon="bulb-o" color="linear-gradient(to bottom, rgb(255, 96, 52), rgb(238, 10, 36), rgb(255, 96, 52))" /> 6、也可以将usingComponents配置到globalStyle下,这样全局页面都可以使用
2025年04月03日
3 阅读
0 评论
0 点赞
2025-04-03
SSM框架包整合代码Maven 共计(42包)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <!-- spring版本号 --> <spring.version>4.3.6.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.2</mybatis.version> </properties> <dependencies> <!-- java ee 替代servlet-api和jsp-api--> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 单元测试unit4 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- log日志接口 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <!-- <scope>test</scope> --> </dependency> <!-- 实现slf4j接口并整合(日志) --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.2</version> </dependency> <!-- JSON处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.8</version> </dependency> <!-- jsp页面使用的jstl表达式 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- taglibs与jstl搭配使用 --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- 数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> <scope>runtime</scope> </dependency> <!-- 数据库连接池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.10.0</version> </dependency> <!-- lang3工具包 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <!-- 文件上传依赖 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <!-- aspectjweaver 支持切入表达式和注解--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.10</version> </dependency> <!-- ognl EL表达式 --> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>3.1.12</version> </dependency> <!-- aopalliance AOP织入--> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <!-- cglib动态代理--> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.4</version> </dependency> <!-- ASM动态代理支持--> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.2</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- Spring MVC和Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
2025年04月03日
3 阅读
0 评论
0 点赞
2025-04-03
BOOT-CRM系统 SSM框架
暂无简介
2025年04月03日
4 阅读
0 评论
0 点赞
2025-04-03
SQL 悲观锁
MySQL的SELECT ...for update悲观锁介绍 悲观锁是对数据被的修改持悲观态度(认为数据在被修改的时候一定会存在并发问题),因此在整个数据处理过程中将数据锁定。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在应用层中实现了加锁机制,也无法保证外部系统不会修改数据)。使用场景举例 商品goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下单时必须确保该商品status为1。假设商品的id为1。如果不采用锁,那么操作方法如下: 123456//1.查询出商品信息selectstatus fromt\_goods whereid=1;//2.根据商品信息生成订单insert intot\_orders (id,goods\_id) values (null,1);//3.修改商品status为2update t\_goods setstatus=2; 上面这种场景在高并发访问的情况下很可能会出现问题。前面已经提到,只有当goods status为1时才能对该商品下单,上面第一步操作中,查询出来的商品status为1。但是当我们执行第三步Update操作的时候,有可能出现其他人先一步对商品下单把goods status修改为2了,但是我们并不知道数据已经被修改了,这样就可能造成同一个商品被下单2次,使得数据不一致。所以说这种方式是不安全的。使用悲观锁来实现 在上面的场景中,商品信息从查询出来到修改,中间有一个处理订单的过程,使用悲观锁的原理就是,当我们在查询出goods信息后就把当前的数据锁定,直到我们修改完毕后再解锁。那么在这个过程中,因为goods被锁定了,就不会出现有第三者来对其进行修改了。要使用悲观锁,我们必须关闭mysql数据库的自动提交属性。 123456789101112set autocommit=0; //设置完autocommit后,我们就可以执行我们的正常业务了。具体如下://0.开始事务begin;/begin work;/start transaction; (三者选一就可以)//1.查询出商品信息selectstatus fromt\_goods whereid=1 forupdate;//2.根据商品信息生成订单insert intot\_orders (id,goods\_id) values (null,1);//3.修改商品status为2update t\_goods setstatus=2;//4.提交事务commit;/commit work; 注:上面的begin/commit为事务的开始和结束,因为在前一步我们关闭了mysql的autocommit,所以需要手动控制事务的提交,在这里就不细表了。 上面的第一步我们执行了一次查询操作:select status from t_goods where id=1 for update;与普通查询不一样的是,我们使用了select…for update的方式,这样就通过数据库实现了悲观锁。此时在t_goods表中,id为1的那条数据就被我们锁定了,其它的事务必须等本次事务提交之后才能执行。这样我们可以保证当前的数据不会被其它事务修改。 注:需要注意的是,在事务中,只有SELECT ... FOR UPDATE 或LOCK IN SHARE MODE 相同数据时会等待其它事务结束后才执行,一般SELECT ... 则不受此影响。拿上面的实例来说,当我执行select status from t_goods where id=1 for update;后。我在另外的事务中如果再次执行select status from t_goods where id=1 for update;则第二个事务会一直等待第一个事务的提交,此时第二个查询处于阻塞的状态,但是如果我是在第二个事务中执行select status from t_goods where id=1;则能正常查询出数据,不会受第一个事务的影响。补充:MySQL select…for update的Row Lock与Table Lock 上面我们提到,使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL InnoDB默认Row-Level Lock,所以只有「明确」地指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。举例说明: 数据库表t_goods,包括id,status,name三个字段,id为主键,数据库中记录如下; 注:为了测试数据库锁,我使用两个console来模拟不同的事务操作,分别用console1、console2来表示。例1: (明确指定主键,并且有此数据,row lock) console1:查询出结果,但是把该条数据锁定了 12setautocommit=0;SELECT * fromt\_goods whereid=1 forupdate; console2:查询被阻塞 console2:如果console1长时间未提交,则会报错例2: (明确指定主键,若查无此数据,无lock) console1:查询结果为空 12setautocommit=0;SELECT * fromt\_goods whereid=4 forupdate; console2:查询结果为空,查询无阻塞,说明console1没有对数据执行锁定 12setautocommit=0;SELECT * fromt\_goods whereid=4 forupdate;例3: (无主键,table lock) console1: 12setautocommit=0;SELECT * fromt\_goods wherestatus=1 forupdate; console2: 1select* fromperson wherestate=2 forUPDATE 查询阻塞,说明console1把表给锁住了.若console1长时间未提交,则返回锁超时。例4: (主键不明确,table lock) console1:查询正常 12setautocommit=0;SELECT * fromt\_goods whereid>1 forupdate; console2:查询被阻塞,说明console1把表给锁住了。 1select* fromperson whereid>=2 forUPDATE 以上就是关于数据库主键对MySQL锁级别的影响实例,需要注意的是,除了主键外,使用索引也会影响数据库的锁定级别。 举例:我们修改t_goods表,给status字段创建一个索引。例5: (明确指定索引,并且有此数据,row lock) console1: 12setautocommit=0;SELECT * fromt\_goods wherestatus=1 forupdate; console2:查询status=1的数据时阻塞,超时后返回为空,说明数据被console1锁定了例7: (明确指定索引,若查无此数据,无lock) console1:查询status=3的数据,返回空数据 12setautocommit=0;SELECT * fromt\_goods wherestatus=3 forupdate; console2:查询status=3的数据,返回空数据 1SELECT * fromt\_goods wherestatus=3 forupdate;
2025年04月03日
4 阅读
0 评论
0 点赞
1
2
3
4
...
54