【尚筹网】二、环境搭建一

news2024/11/23 6:33:51

【尚筹网】二、环境搭建一

  • 环境搭建总体目标
  • 创建工程
    • 系统架构图
    • 工程创建计划
    • 创建空项目
      • 创建对应的 Maven 模块
      • 建立模块间的依赖
  • 创建数据库
  • 基于 Maven 的 Mybatis 的逆向过程
    • 配置 pom
    • 创建 generatorConfig.xml
    • 执行逆向工程操作的 maven 指令
    • 将逆向工程生成的资源归位
  • 父工程依赖管理
  • 版本声明
  • 依赖管理
  • Spring 整合 MyBatis
    • 思路
    • 具体操作
      • 在子工程中加入搭建环境的所需的具体依赖
      • 创建 jdbc.properties
      • 创建 mybatis-config.xml
      • 创建 spring-persist-mybatis.xml
      • Spring 配置第一步 配置数据源
      • 测试能否连接数据库
      • Spring 配置第二步 配置 SqlSessionFactoryBean 及 MapperScannerConfigurer
      • 测试能否插入数据
  • 日志系统
    • 意义
    • 具体操作
      • 加入 slf4j + logback
      • 主动打印日志的方法
      • 更换框架的日志系统

环境搭建总体目标

在这里插入图片描述

创建工程

系统架构图

在这里插入图片描述

工程创建计划

atcrowdfunding01-admin-parent
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding01-admin-parent
 packaging:pom
atcrowdfunding02-admin-webui
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding02-admin-webui
 packaging:war
atcrowdfunding03-admin-component
 groupId:com.atguigu.crowd
artifactId:atcrowdfunding03-admin-component
 packaging:jar
atcrowdfunding04-admin-entity
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding04-admin-entity
 packaging:jar
atcrowdfunding05-common-util
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding05-common-util
 packaging:jar
atcrowdfunding06-common-reverse
 groupId:com.atguigu.crowd
 artifactId:atcrowdfunding06-common-reverse
 packaging:jar

创建空项目

创建对应的 Maven 模块

在这里插入图片描述

建立模块间的依赖

  • webui 依赖 component
  • component 依赖 entity
  • component 依赖 util

创建数据库

CREATE DATABASE `project_crowd` CHARACTER SET utf8;
use project_crowd;
drop table if exists t_admin;
create table t_admin
(
    id          int          not null auto_increment, # 主键
    login_acct  varchar(255) not null,                # 登录账号
    user_pswd   char(32)     not null,                # 登录密码
    user_name   varchar(255) not null,                # 昵称
    email       varchar(255) not null,                # 邮件地址
    create_time char(19),                             # 创建时间
    primary key (id)
);

基于 Maven 的 Mybatis 的逆向过程

配置 pom

在 atcrowdfunding06-common-reverse 模块的 pom.xml 中配置

<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.8</version>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>1.3.0</version>

			<dependencies>

				<dependency>
					<groupId>org.mybatis.generator</groupId>
					<artifactId>mybatis-generator-core</artifactId>
					<version>1.3.2</version>
				</dependency>
				<dependency>
					<groupId>com.mchange</groupId>
					<artifactId>c3p0</artifactId>
					<version>0.9.2</version>
				</dependency>

				<dependency>
					<groupId>mysql</groupId>
					<artifactId>mysql-connector-java</artifactId>
					<version>8.0.33</version>
				</dependency>
			</dependencies>
		</plugin>
	</plugins>
</build>

创建 generatorConfig.xml

在 atcrowdfunding06-common-reverse 模块下的 src/main/resources 目录下创建 generatorConfig.xml,用来配置逆向工程

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
	<!--mybatis-generator:generate-->
	<context id="atguiguTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!--是否去除自动生成的注释true:是;false:否-->
			<property name="suppressAllComments" value="true"/>
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码-->
		<jdbcConnection
				driverClass="com.mysql.cj.jdbc.Driver"
				connectionURL="jdbc:mysql://localhost:3306/project_crowd?serverTimezone=Asia/Shanghai"
				userId="root"
				password="123456">
		</jdbcConnection>
		<!--默认false,把JDBCDECIMAL和NUMERIC类型解析为Integer,为true时把 JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal-->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false"/>
		</javaTypeResolver>
		<!--targetProject:生成Entity类的路径-->
		<javaModelGenerator targetProject=".\src\main\java"
		                    targetPackage="com.atguigu.crowd.entity">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
			<!--从数据库返回的值被清理前后的空格-->
			<property name="trimStrings" value="true"/>
		</javaModelGenerator>
		<!--targetProject:XxxMapper.xml映射文件生成的路径-->
		<sqlMapGenerator targetProject=".\src\main\java"
		                 targetPackage="com.atguigu.crowd.mapper">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
		</sqlMapGenerator>
		<!--targetPackage:Mapper接口生成的位置-->
		<javaClientGenerator type="XMLMAPPER"
		                     targetProject=".\src\main\java"
		                     targetPackage="com.atguigu.crowd.mapper">
			<!--enableSubPackages:是否让schema作为包的后缀-->
			<property name="enableSubPackages" value="false"/>
		</javaClientGenerator>
		<!--数据库表名字和我们的entity类对应的映射指定-->
		<table tableName="t_admin" domainObjectName="Admin"/>
	</context>
</generatorConfiguration>

执行逆向工程操作的 maven 指令

双击即可

在这里插入图片描述

将逆向工程生成的资源归位

创建完后给 Admin 添加无参全参构造器,然后给生成的资源归位
在这里插入图片描述

父工程依赖管理

版本声明

在 atcrowdfunding01-admin-parent 模块的 pom.xml 中进行版本声明

<properties>
	<maven.compiler.source>8</maven.compiler.source>
	<maven.compiler.target>8</maven.compiler.target>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!--声明属性,对Spring的版本进行统一管理-->
	<atguigu.spring.version>4.3.20.RELEASE</atguigu.spring.version>
	<!--声明属性,对SpringSecurity的版本进行统一管理-->
	<atguigu.spring.security.version>4.2.10.RELEASE</atguigu.spring.security.version>
</properties>

依赖管理

在 atcrowdfunding01-admin-parent 中进行版本声明后,还需要引入依赖

遇到的问题:若依赖基本全部爆红(没下载 jar 包),可以将 dependencyManagement 删去后再重新加载,等下载完 jar 包后再加回去

<dependencyManagement>
	<dependencies>
		<!-- Spring 依赖 -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${atguigu.spring.version}</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/cglib/cglib -->
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2</version>
		</dependency>
		<!-- 数据库依赖 -->
		<!-- MySQL 驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.3</version>
		</dependency>
		<!-- 数据源 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.31</version>
		</dependency>
		<!-- MyBatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		<!-- MyBatis 与 Spring 整合 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- MyBatis 分页插件 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.0.0</version>
		</dependency>
		<!-- 日志 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- 其他日志框架的中间转换包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.7.25</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
			<version>1.7.25</version>
		</dependency>
		<!-- Spring 进行 JSON 数据转换依赖 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.8</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.8</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.8</version>
		</dependency>
		<!-- JSTL 标签库 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- junit 测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- 引入 Servlet 容器中相关依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- JSP 页面使用的依赖 -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1.3-b06</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.5</version>
		</dependency>
		<!-- SpringSecurity 对 Web 应用进行权限管理 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
		<!-- SpringSecurity 配置 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
		<!-- SpringSecurity 标签库 -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-taglibs</artifactId>
			<version>4.2.10.RELEASE</version>
		</dependency>
	</dependencies>
</dependencyManagement>

Spring 整合 MyBatis

思路

在这里插入图片描述

具体操作

在子工程中加入搭建环境的所需的具体依赖

在 atcrowdfunding03-admin-component 模块添加依赖

<!-- Spring依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-orm</artifactId>
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
	<groupId>cglib</groupId>
	<artifactId>cglib</artifactId>
</dependency>

<!-- 数据库依赖 -->
<!-- MySQL驱动 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- 数据源 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
</dependency>

<!-- MyBatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
</dependency>

<!-- MyBatis与Spring整合 -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
</dependency>

<!-- MyBatis分页插件 -->
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
</dependency>

<!-- 日志 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
</dependency>

<!-- 其他日志框架的中间转换包 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
</dependency>

<!-- Spring进行JSON数据转换依赖 -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
</dependency>

<!-- JSTL标签库 -->
<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
</dependency>

<!-- 引入Servlet容器中相关依赖 -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
</dependency>

创建 jdbc.properties

在这里插入图片描述

jdbc.user=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.cj.jdbc.Driver

创建 mybatis-config.xml

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

创建 spring-persist-mybatis.xml

在这里插入图片描述

Spring 配置第一步 配置数据源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- 加载外部属性文件 -->
	<context:property-placeholder location="classpath:jdbc.properties" />

	<!-- 配置数据源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.user}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
</beans>

测试能否连接数据库

在这里插入图片描述

若控制台输出 connection,则连接成功

package com.atguigu.crowd.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
 *
 * @Desc :
 * @Time : 2024/11/17 17:13
 * @Author : Code_By_Jasonakeke
 * @Email : 2284037977@qq.com
 * @Class : CrowdTest
 * @IDE : IntelliJ IDEA
 */
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"})
public class CrowdTest {

	@Autowired
	private DataSource dataSource;

	@Test
	public void test() throws SQLException {
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
	}
}

Spring 配置第二步 配置 SqlSessionFactoryBean 及 MapperScannerConfigurer

<!-- 配置 SqlSessionFactoryBean 整合 MyBatis -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean" >
	<!-- 指定 MyBatis 全局配置文件位置 -->
	<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
	<!-- 指定 Mapper.xml 配置文件位置 -->
	<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" />
	<!-- 配置数据源  -->
	<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置 MapperScannerConfigurer 来扫描 Mapper 接口所在的包 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.atguigu.crowd.mapper" />
</bean>

测试能否插入数据

package com.atguigu.crowd.test;

import com.atguigu.crowd.entity.Admin;
import com.atguigu.crowd.mapper.AdminMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


/**
 * Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
 *
 * @Desc :
 * @Time : 2024/11/17 17:13
 * @Author : Code_By_Jasonakeke
 * @Email : 2284037977@qq.com
 * @Class : CrowdTest
 * @IDE : IntelliJ IDEA
 */
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml", "classpath:spring-persist-tx.xml"})
public class CrowdTest {

	@Autowired
	private AdminMapper adminMapper;

	@Test
	public void testInsertAdmin() {
		Admin admin = new Admin(null, "tom", "123456", "汤姆", "tom@atguigu.com", null);
		int count = adminMapper.insert(admin);
		System.out.println("受影响行数:" + count);
	}
}

日志系统

意义

项目日志系统在现代项目管理中扮演着至关重要的角色。它不仅是记录项目进展、问题和解决方案的工具,还是团队协作、决策支持和项目回顾的重要基础。

  1. 记录项目进展

    • 项目日志系统能够实时、详细地记录项目的各个阶段和任务的完成情况。
    • 这有助于团队成员和项目经理了解项目的当前状态,确保所有工作都在预定的时间表和预算内进行。
  2. 跟踪问题和风险

    • 通过日志系统,团队成员可以记录在项目执行过程中遇到的各种问题和风险。
    • 这些问题和风险可以被分类、优先级排序,并关联到具体的任务或阶段,以便进行后续跟踪和解决。
  3. 促进团队协作

    • 项目日志系统通常具有协作功能,如评论、点赞和分享等,这有助于增强团队成员之间的沟通和协作。
    • 团队成员可以实时查看彼此的日志,了解各自的工作进展和遇到的问题,从而更加紧密地合作。
  4. 提供决策支持

    • 项目经理和决策层可以通过日志系统获取项目的全面信息,包括进度、成本、质量和风险等方面。
    • 这些信息为决策提供了有力的数据支持,有助于项目经理做出更加明智的决策。
  5. 便于项目回顾和总结

    • 在项目结束后,项目日志系统可以作为项目回顾和总结的重要参考。
    • 通过查看日志,团队成员可以了解项目的成功经验和不足之处,为未来的项目提供宝贵的经验和教训。
  6. 提高项目透明度

    • 项目日志系统增加了项目的透明度,使得所有相关方都能够清晰地了解项目的进展和状态。
    • 这有助于建立信任,减少误解和冲突,提高项目的整体效率和质量。
  7. 支持持续改进

    • 通过分析项目日志中的数据,团队可以识别出项目中的瓶颈、低效环节和潜在改进点。
    • 这些信息为项目的持续改进提供了有力的支持,有助于团队不断优化项目管理流程和方法。

综上所述,项目日志系统在项目管理中具有不可替代的作用。它不仅能够提高项目的执行效率和质量,还能够促进团队协作和决策支持,为项目的成功提供有力的保障。因此,在项目管理中,建立和维护一个有效的项目日志系统是非常重要的。

具体操作

加入 slf4j + logback

将 atcrowdfunding03-admin-component 模块中之前日志相关的依赖全部删去,然后加入 slf4j+logback 依赖

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
</dependency>

主动打印日志的方法

@Test
public void testLog(){
	// 1.获取 Logger 对象
	Logger logger = LoggerFactory.getLogger(CrowdTest.class);

	// 2.根据不同日志级别,打印不同级别的日志
	logger.debug("这是 DEBUG 级别的日志");
	logger.info("这是 INFO 级别的日志");
	logger.warn("这是 WARN 级别的日志");
	logger.error("这是 ERROR 级别的日志");
}

更换框架的日志系统

  1. 排除 commons-logging
  2. 加入转换包(atcrowdfunding03-admin-component 模块)
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>jcl-over-slf4j</artifactId>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全面解析 JMeter 后置处理器:概念、工作原理与应用场景

在性能测试中&#xff0c;Apache JMeter是一个非常流行的工具&#xff0c;它不仅能够模拟大量用户进行并发访问&#xff0c;还提供了丰富的扩展机制来满足各种复杂的测试需求。后置处理器&#xff08;Post-Processor&#xff09;是JMeter中非常重要的组件之一&#xff0c;用于在…

数字IC后端实现时钟树综合系列教程 | Clock Tree,Clock Skew Group之间的区别和联系

Q: Clock&#xff0c;Clock Tree和Skew Group有何区别&#xff1f;Innovus CCOPT引擎是如何使用这些的&#xff1f; Clock是时序约束SDC中的时钟定义点。 create_clock -name clk_osc -period $period_24m [get_ports xin_osc0_func] 时钟树综合(Clock Tree Synthesis)之前应…

基于零相差前馈补偿的 PID 控制

零相差前馈补偿是一种结合前馈补偿与反馈控制的策略&#xff0c;旨在提高控制系统对参考信号的跟踪精度。通过设计合理的前馈补偿器&#xff0c;使得系统对参考输入实现零相位差的跟踪&#xff0c;同时利用 PID 控制器保证系统的稳定性和动态性能。 1. 原理概述 目标&#xff…

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型&#xff0c;对应数据库中varchar类型&#xff0c;除了通用类型外接收另外两个参数&#xff1a; size: 字符长度&#xff0c;超出的长度将被截断 trim: 默认True&#xff0c;是否字段值应该被去空白。 Text 文本类型&#xff0c;对应数据库…

Wireshark抓取HTTPS流量技巧

一、工具准备 首先安装wireshark工具&#xff0c;官方链接&#xff1a;Wireshark Go Deep 二、环境变量配置 TLS 加密的核心是会话密钥。这些密钥由客户端和服务器协商生成&#xff0c;用于对通信流量进行对称加密。如果能通过 SSL/TLS 日志文件&#xff08;例如包含密钥的…

鸿蒙生态崛起

1.鸿蒙生态&#xff1a;开发者的新蓝海 从开发者角度看&#xff0c;鸿蒙生态带来了巨大机遇。其分布式能力实现了不同设备间的无缝体验&#xff0c;如多屏协同&#xff0c;让应用能跨手机、平板、智能穿戴和车载设备流畅运行。开发工具也有显著提升&#xff0c;方舟编译器等极大…

【MySQL】精细讲解:数据库内置函数深度学习解析

前言&#xff1a;本节内容讲述mysql里面的函数的概念&#xff0c; 在mysql当中&#xff0c; 内置了很多函数工作。 这些函数丰富了我们的操作。 比如字符串函数、数据函数以及一些其他函数等等。 ps:友友们学习了表的基本操作后就可以观看本节内容啦! 目录 日期函数 current_…

亚信安全与飞书达成深度合作

近日&#xff0c;亚信安全联合飞书举办的“走近先进”系列活动正式走进亚信。活动以“安全护航信息化 共筑数字未来路”为主题&#xff0c;吸引了众多数字化转型前沿企业的近百位领导参会。作为“走近先进”系列的第二场活动&#xff0c;本场活动更加深入挖掘了数字化转型的基础…

[less] Operation on an invalid type

我这个是升级项目的时候遇到的&#xff0c;要从 scss 升级到 less&#xff0c;然后代码中就报了这个错误 我说一下代码的错误过程&#xff0c;但是这里没有复现&#xff0c;因为我原本报错的代码要复杂很多&#xff0c;而且是公司代码&#xff0c;不方便透露&#xff0c;这是我…

“iOS profile文件与私钥证书文件不匹配”总结打ipa包出现的问题

目录 文件和证书未加载或特殊字符问题 证书过期或Profile文件错误 确认开发者证书和私钥是否匹配 创建证书选择错误问题 申请苹果 AppId时勾选服务不全问题 ​总结 在上线ios平台的时候&#xff0c;在Hbuilder中打包遇见了问题&#xff0c;生成ipa文件时候&#xff0c;一…

大语言模型(LLM)安全:十大风险、影响和防御措施

一、什么是大语言模型&#xff08;LLM&#xff09;安全&#xff1f; 大语言模型&#xff08;LLM&#xff09;安全侧重于保护大型语言模型免受各种威胁&#xff0c;这些威胁可能会损害其功能、完整性和所处理的数据。这涉及实施措施来保护模型本身、它使用的数据以及支持它的基…

基础知识学习上

基础知识学习上 1.关于print1.1 format 方法 2.运算符2.1 除法运算2.2 幂运算 3.条件控制语句3.1 if语句3.2 循环语句 4.复杂数据类型4.1列表4.2字典4.3字符串 5.函数 1.关于print 分隔符 print(1, 2, 3, 4, sep-) print(1, 2, 3, 4, sep。)结尾符 print(1, 2, 3, 4, end?) pr…

开源远程桌面工具:RustDesk

在远程办公和远程学习日益普及的今天&#xff0c;我们经常需要远程访问办公电脑或帮助他人解决电脑问题。 市面上的远程控制软件要么收费昂贵&#xff0c;要么需要复杂的配置&#xff0c;更让人担心的是数据安全问题。 最近我发现了一款名为 RustDesk 的开源远程桌面工具&…

双通道CAN转以太网(三格电子)

一、功能描述 SG-CANET-210 是一款用来把 CAN 总线数据转为网口数据的设备。网口支 持 TCP Sever 、TCP Client 、UDP Sever 、UDP Client 、UDP Broadcast 模式&#xff0c;可以 通过软件配置和网页配置。设备提供两路 CAN 接口&#xff0c;两路 CAN 可分别配置为 不同的工作…

WebApis学习笔记,第二节:高级语法

WebApis学习笔记&#xff0c;第二节&#xff1a;高级语法 一、JS组成 我们再回顾一下JS的组成&#xff1a;ECMAScript: 规定了js基础语法核心知识。 比如&#xff1a;变量、分支语句、循环语句、对象等等Web APIs : DOM 文档对象模型&#xff0c; 定义了一套操作HTML文档的AP…

【ubuntu24.04.1最简洁安装方案】

我的电脑配置&#xff1a; 128GB固态硬盘&#xff0c;1TB 机械硬盘&#xff0c;我把整个 windows 系统全噶掉了&#xff0c;只安装ubuntu24.04.1一个Linux系统噶windows系统&#xff0c; 推荐使用 DiskGenius这个工具&#xff0c;好用&#xff0c;但是也要弄明白了再用啊&#…

【spring的底层原理】Bean的生命周期

文章目录 什么是Bean的生命周期Bean的生命周期可以分为几个步骤Bean的定义阶段加载BeanDefinition中指定的类实例化前&#xff08;可选&#xff09;实例化属性注入Aware接口回调BeanPostProcessor前置处理初始化初始化前&#xff08;可选&#xff09;初始化初始化后&#xff08…

全面前端显示:鹅成熟与否识别

1.背景意义 研究背景与意义 随着生态保护意识的增强和生物多样性的重要性日益凸显&#xff0c;水鸟尤其是加拿大鹅的保护与管理成为了生态学研究的一个重要领域。加拿大鹅在北美地区广泛分布&#xff0c;其种群数量的变化不仅反映了生态环境的健康状况&#xff0c;也对当地生…

label studio+sam实现半自动标注

1、主要参考&#xff1a;https://github.com/open-mmlab/playground/tree/main/label_anything 这里提醒大家一点&#xff0c;有人使用过程中&#xff0c;出现自动标注无反应&#xff0c;就是操作步骤出现了问题&#xff01;一定记住按这个顺序操作&#xff01;&#xff01;&a…

Python爬虫案例八:抓取597招聘网信息并用xlutils进行excel数据的保存

excel保存数据的三种方式&#xff1a; 1、pandas保存excel数据&#xff0c;后缀名为xlsx; 举例&#xff1a; import pandas as pddic {姓名: [张三, 李四, 王五, 赵六],年龄: [18, 19, 20, 21],住址: [广州, 青岛, 南京, 重庆] } dic_file pd.DataFrame(dic) dic_file…