增加nacos中间件
This commit is contained in:
@@ -4,7 +4,7 @@ package cn.mayiming;
|
||||
* Hello world!
|
||||
*
|
||||
*/
|
||||
@Spring
|
||||
|
||||
public class App
|
||||
{
|
||||
public static void main( String[] args )
|
||||
|
||||
@@ -16,20 +16,42 @@
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<mysql.version>8.0.33</mysql.version>
|
||||
<!-- 显式指定 MyBatis 版本(与 Spring Boot 3.2.3 兼容) -->
|
||||
<mybatis-spring-boot-starter.version>3.0.3</mybatis-spring-boot-starter.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- 核心:Spring Boot Web 依赖(版本由父工程继承) -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 测试依赖:适配 Spring Boot 3 的 JUnit 5(替换老旧的 JUnit 3.8.1) -->
|
||||
<!-- 可选:Nacos 配置管理(从 Nacos 读取配置文件) -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
<!-- 构建配置:确保编译和打包正常 -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>3.2.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -1,5 +1,6 @@
|
||||
package cn.mayiming;
|
||||
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
package cn.mayiming.Controller.Redis;
|
||||
|
||||
public class RedisParam {
|
||||
private String key;
|
||||
private String value;
|
||||
|
||||
// 必须加无参构造器(JSON解析需要)
|
||||
public RedisParam() {}
|
||||
|
||||
// GET/SET方法(必须加,否则JSON解析不到值)
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package cn.mayiming.Controller.Redis;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@RestController
|
||||
public class Redistest {
|
||||
@Autowired
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
@PostMapping("/redis/put")
|
||||
public String put(@RequestBody RedisParam param) {
|
||||
String key = param.getKey();
|
||||
stringRedisTemplate.opsForValue().set(key, "123", 10, TimeUnit.MINUTES);
|
||||
String redisValue = stringRedisTemplate.opsForValue().get(key);
|
||||
return "Redis写入成功!key=" + key + ",value=" + redisValue;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package cn.mayiming.Controller.UserCon;
|
||||
|
||||
public class UserBody {
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String username;
|
||||
public String password;
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
package cn.mayiming.Controller.UserCon;
|
||||
|
||||
import cn.mayiming.Mapper.UserMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
public class UserController {
|
||||
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@PostMapping("/login")
|
||||
public Map<String, Object> login(@RequestBody UserBody user) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
String dbPassword = userMapper.getPasswordByUsername(user.getUsername());
|
||||
String username = user.getUsername();
|
||||
String password = user.getPassword();
|
||||
// 3. 编写 SQL 查询数据库中的用户密码
|
||||
// 用 ? 占位符,防止 SQL 注入(必须!)
|
||||
|
||||
// 4. 验证密码(实际项目要加密对比,这里简单演示)
|
||||
if (password != null && password.equals(dbPassword)) {
|
||||
result.put("code", 200);
|
||||
result.put("msg", "登录成功");
|
||||
result.put("data", username);
|
||||
} else {
|
||||
result.put("code", 400);
|
||||
result.put("msg", "密码错误");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 捕获“用户不存在”等异常
|
||||
result.put("code", 404);
|
||||
result.put("msg", "用户名不存在或登录失败");
|
||||
result.put("error", e.getMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
package cn.mayiming.Mapper;
|
||||
import cn.mayiming.Controller.UserCon.UserBody;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface UserMapper {
|
||||
@Select("SELECT password FROM user WHERE username = #{username}")
|
||||
String getPasswordByUsername(String username);
|
||||
/**
|
||||
* 根据ID查询用户(单条查询)
|
||||
* @param id 用户ID
|
||||
* @return 完整用户信息
|
||||
*/
|
||||
@Select("SELECT id, username, password, nickname, create_time AS createTime FROM user WHERE id = #{id}")
|
||||
UserBody getUserById(Long id);
|
||||
|
||||
/**
|
||||
* 根据用户名查询完整用户信息(登录/校验用)
|
||||
* @param username 用户名
|
||||
* @return 完整用户信息
|
||||
*/
|
||||
@Select("SELECT id, username, password, nickname, create_time AS createTime FROM user WHERE username = #{username}")
|
||||
UserBody getUserByUsername(String username);
|
||||
|
||||
/**
|
||||
* 查询所有用户(分页建议用 MyBatis-Plus,这里先实现全量)
|
||||
* @return 用户列表
|
||||
*/
|
||||
@Select("SELECT id, username, password, nickname, create_time AS createTime FROM user")
|
||||
List<UserBody> listAllUsers();
|
||||
|
||||
// ==================== 增 ====================
|
||||
/**
|
||||
* 新增用户(自增ID)
|
||||
* @param user 用户实体
|
||||
* @return 影响行数(1=成功,0=失败)
|
||||
*/
|
||||
@Insert("INSERT INTO user (username, password, nickname, create_time) VALUES (#{username}, #{password}, #{nickname}, #{createTime})")
|
||||
@Options(useGeneratedKeys = true, keyProperty = "id") // 自动返回自增的ID到user对象的id字段
|
||||
int insertUser(UserBody user);
|
||||
|
||||
// ==================== 改 ====================
|
||||
/**
|
||||
* 根据ID修改用户昵称
|
||||
* @param id 用户ID
|
||||
* @param nickname 新昵称
|
||||
* @return 影响行数
|
||||
*/
|
||||
@Update("UPDATE user SET nickname = #{nickname} WHERE id = #{id}")
|
||||
int updateNicknameById(@Param("id") Long id, @Param("nickname") String nickname);
|
||||
|
||||
/**
|
||||
* 根据用户名修改密码
|
||||
* @param username 用户名
|
||||
* @param newPassword 新密码
|
||||
* @return 影响行数
|
||||
*/
|
||||
@Update("UPDATE user SET password = #{newPassword} WHERE username = #{username}")
|
||||
int updatePasswordByUsername(@Param("username") String username, @Param("newPassword") String password);
|
||||
|
||||
// ==================== 删 ====================
|
||||
/**
|
||||
* 根据ID删除用户
|
||||
* @param id 用户ID
|
||||
* @return 影响行数
|
||||
*/
|
||||
@Delete("DELETE FROM user WHERE id = #{id}")
|
||||
int deleteUserById(Long id);
|
||||
|
||||
/**
|
||||
* 根据用户名删除用户
|
||||
* @param username 用户名
|
||||
* @return 影响行数
|
||||
*/
|
||||
@Delete("DELETE FROM user WHERE username = #{username}")
|
||||
int deleteUserByUsername(String username);
|
||||
}
|
||||
@@ -1,24 +1,21 @@
|
||||
server:
|
||||
port: 9091
|
||||
port: 9090
|
||||
spring:
|
||||
data:
|
||||
redis:
|
||||
port: 6379
|
||||
password: ""
|
||||
database: 0
|
||||
timeout: 10000
|
||||
datasource:
|
||||
# 连接 URL(关键:test_db 是你要连接的数据库名,需提前创建)
|
||||
url: jdbc:mysql://rm-f8z6oc5a03331500p8o.mysql.rds.aliyuncs.com:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
|
||||
# 数据库用户名
|
||||
username: root
|
||||
# 数据库密码(替换为你的 MySQL 密码)
|
||||
password: Root123456
|
||||
# 驱动类名(MySQL 8.x 用这个,5.x 改为 com.mysql.jdbc.Driver)
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# 连接池配置(可选,提升性能)
|
||||
hikari:
|
||||
maximum-pool-size: 10 # 最大连接数
|
||||
minimum-idle: 2 # 最小空闲连接数
|
||||
idle-timeout: 60000 # 空闲连接超时时间(毫秒)
|
||||
connection-timeout: 30000 # 连接超时时间(毫秒)
|
||||
application:
|
||||
name: user-service
|
||||
cloud:
|
||||
nacos:
|
||||
# 服务注册发现配置
|
||||
discovery:
|
||||
server-addr: localhost:8848 # Nacos 服务地址(默认端口 8848)
|
||||
namespace: public # 命名空间(默认 public,自定义需先在 Nacos 控制台创建)
|
||||
group: DEFAULT_GROUP # 分组(默认 DEFAULT_GROUP)
|
||||
service: user-service # 注册到 Nacos 的服务名(建议和子项目 artifactId 一致)
|
||||
# 配置管理配置(如果引入了 config 依赖才需要)
|
||||
config:
|
||||
server-addr: localhost:8848 # 和 discovery 一致
|
||||
file-extension: yaml # 配置文件格式(yaml/yml/properties)
|
||||
namespace: public
|
||||
group: DEFAULT_GROUP
|
||||
config:
|
||||
import: nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}?server-addr=${spring.cloud.nacos.config.server-addr}
|
||||
@@ -1,38 +0,0 @@
|
||||
package cn.mayiming;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user