Compare commits
No commits in common. "0fb05d446157304e3c66101383288b0dbe72a6e1" and "da304f94e1b4088a9b1ce92bd1fd1479295e537e" have entirely different histories.
0fb05d4461
...
da304f94e1
@ -1,71 +0,0 @@
|
|||||||
package cn.whaifree.leetCode;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 14:24
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode283 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
int[] nums = {0, 4, 0, 3, 12, 0};
|
|
||||||
new Solution().moveZeroes(nums);
|
|
||||||
for (int num : nums) {
|
|
||||||
System.out.print(num + " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
public void moveZeroes(int[] nums) {
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 1; i < nums.length; i++) {
|
|
||||||
// 插入排序
|
|
||||||
for (int j = i; j > 0; j--) {
|
|
||||||
if (nums[j - 1] == 0) {
|
|
||||||
swap(nums, j, j - 1);
|
|
||||||
} else if (nums[j] != 0 && nums[j - 1] == 0) { // 遇到非0就往前插入
|
|
||||||
swap(nums, j, j - 1);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void swap(int[] nums, int i, int j) {
|
|
||||||
int temp = nums[i];
|
|
||||||
nums[i] = nums[j];
|
|
||||||
nums[j] = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test1() {
|
|
||||||
int[] nums = {0, 4, 0, 3, 12, 0};
|
|
||||||
new Solution1().moveZeroes(nums);
|
|
||||||
for (int num : nums) {
|
|
||||||
System.out.print(num + " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution1 {
|
|
||||||
public void moveZeroes(int[] nums) {
|
|
||||||
int left = 0;
|
|
||||||
for (int i = 0; i < nums.length; i++) {
|
|
||||||
if (nums[i] != 0) {
|
|
||||||
nums[left] = nums[i];
|
|
||||||
left++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int i = left; i < nums.length; i++) {
|
|
||||||
nums[i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,96 +0,0 @@
|
|||||||
package cn.whaifree.leetCode;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 15:17
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode560 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
int[] nums = {-1, -1, 1};
|
|
||||||
int k = 0;
|
|
||||||
|
|
||||||
int res = new Solution().subarraySum(nums, k);
|
|
||||||
System.out.println(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
/**
|
|
||||||
* -2 -5 1 2
|
|
||||||
*
|
|
||||||
* -2 -7 -6 -4
|
|
||||||
* 子数组(连续)的个数 。
|
|
||||||
*
|
|
||||||
* 前缀和,前缀和的区间总面积为k的个数
|
|
||||||
*
|
|
||||||
* @param nums
|
|
||||||
* @param k
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public int subarraySum(int[] nums, int k) {
|
|
||||||
int len = nums.length;
|
|
||||||
|
|
||||||
int[] preSum = new int[len + 1];
|
|
||||||
for (int i = 0; i < len; i++) {
|
|
||||||
preSum[i + 1] = preSum[i] + nums[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
for (int left = 0; left < len; left++) {
|
|
||||||
for (int right = left; right < len; right++) {
|
|
||||||
// 区间和 [left..right],注意下标偏移
|
|
||||||
if (preSum[right + 1] - preSum[left] == k) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 子数组(连续)的个数 。
|
|
||||||
*
|
|
||||||
* 前缀和,前缀和的区间总面积为k的个数
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* 1. 每次计算的元素n,在前面计算好前缀和,只要找到k-n的前缀和的个数
|
|
||||||
* --- 计算每个前缀和的数量,
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param nums
|
|
||||||
* @param k
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public int subarraySum1(int[] nums, int k) {
|
|
||||||
Map<Integer, Integer> map = new HashMap<>();
|
|
||||||
map.put(0, 1);
|
|
||||||
// map为各种前缀和的数量
|
|
||||||
int preSum = 0;
|
|
||||||
int res = 0;
|
|
||||||
for (int num : nums) {
|
|
||||||
preSum += num;
|
|
||||||
// 画图,就是一个大的面积,找到小的面积,取其中的差值区域;即找到一个范围==k
|
|
||||||
// | preSum-k | k |
|
|
||||||
// 整个是preSum
|
|
||||||
// PreSum当前的前缀和-某个之前的前缀和=k,而map存储之前前缀和k的个数为v个
|
|
||||||
if (map.containsKey(preSum - k)) {
|
|
||||||
res += map.get(preSum - k);
|
|
||||||
}
|
|
||||||
map.put(preSum, map.getOrDefault(preSum, 0) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
package cn.whaifree.redo.redo_all_241016;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 14:08
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode1005 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
int[] nums = {4,-5,4,-5,9,4,5};
|
|
||||||
int k = 1;
|
|
||||||
int result = new Solution().largestSumAfterKNegations(nums, k);
|
|
||||||
System.out.println(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
public int largestSumAfterKNegations(int[] nums, int k) {
|
|
||||||
Arrays.sort(nums);
|
|
||||||
|
|
||||||
int res = 0;
|
|
||||||
int minAbs = Integer.MAX_VALUE;
|
|
||||||
for (int i = 0; i < nums.length; i++) {
|
|
||||||
if (nums[i] < 0 && k > 0) {
|
|
||||||
nums[i] = -nums[i];
|
|
||||||
k--;
|
|
||||||
}
|
|
||||||
minAbs = Math.min(minAbs, nums[i]);
|
|
||||||
res += nums[i];
|
|
||||||
}
|
|
||||||
if (k % 2 == 0) {
|
|
||||||
// 偶数
|
|
||||||
return res;
|
|
||||||
}else {
|
|
||||||
return res - minAbs * 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
package cn.whaifree.redo.redo_all_241016;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/10/31 12:03
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode123 {
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* dp[1] 表示手里没有第一支股票的最大利润
|
|
||||||
* - 前一天就没 dp[i-1][1]
|
|
||||||
* - 前一天有第一支,今天刚刚卖了 dp[i-1][2] + prices[i]
|
|
||||||
* dp[2] 表示手里有第一支股票的最大利润
|
|
||||||
* - 前一天就有 dp[i-1][2]
|
|
||||||
* - 前一天没有,刚刚买入第一支 dp[i-1][1] - prices[i]
|
|
||||||
*
|
|
||||||
* dp[3] 表示手里没有第二支股票的最大利润
|
|
||||||
*
|
|
||||||
* dp[4] 表示手里有第二支股票的最大利润
|
|
||||||
*
|
|
||||||
* @param prices
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public int maxProfit(int[] prices) {
|
|
||||||
|
|
||||||
int[][] dp = new int[prices.length][5];
|
|
||||||
dp[0][1] = 0;
|
|
||||||
dp[0][2] = -prices[0];
|
|
||||||
dp[0][3] = 0;
|
|
||||||
dp[0][4] = -prices[0];
|
|
||||||
|
|
||||||
for (int i = 1; i < prices.length; i++) {
|
|
||||||
dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][0] - prices[i]);
|
|
||||||
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][2] + prices[i]);
|
|
||||||
// 手里有第二支股票的最大利润 前一天就有第二支,【前一天没有第二支,也没有第一支但今天买入】
|
|
||||||
dp[i][4] = Math.max(dp[i - 1][4], dp[i - 1][1] - prices[i]);
|
|
||||||
// 手里没有第二支股票的最大利润 前一天就没有第二支,前一天有第二支但今天卖出
|
|
||||||
dp[i][3] = Math.max(dp[i - 1][3], dp[i - 1][4] + prices[i]);
|
|
||||||
}
|
|
||||||
return dp[prices.length - 1][3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,87 +0,0 @@
|
|||||||
package cn.whaifree.redo.redo_all_241016;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/10/31 11:28
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode289 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
int[][] board = new int[][]{{0,1,0},{0,0,1},{1,1,1},{0,0,0}};
|
|
||||||
new Solution().gameOfLife(board);
|
|
||||||
for (int i = 0; i < board.length; i++) {
|
|
||||||
for (int j = 0; j < board[0].length; j++) {
|
|
||||||
System.out.print(board[i][j] + " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
/**
|
|
||||||
* 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;1 2
|
|
||||||
* 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 1 1
|
|
||||||
* 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;1 2
|
|
||||||
* 如果死细胞周围正好有三个活细胞,则该位置死细胞复活;0 3
|
|
||||||
*
|
|
||||||
* 2 之前是活着,现在死了
|
|
||||||
* 3 之前是死的,现在活了
|
|
||||||
*
|
|
||||||
* 最后遍历吧3变成1,把2变成0
|
|
||||||
*
|
|
||||||
* @param board
|
|
||||||
*/
|
|
||||||
public void gameOfLife(int[][] board) {
|
|
||||||
for (int i = 0; i < board.length; i++) {
|
|
||||||
for (int j = 0; j < board[0].length; j++) {
|
|
||||||
int count = aliveCount(board, i, j);
|
|
||||||
if (board[i][j] == 1) { // 之前是活着的
|
|
||||||
if (count < 2) {
|
|
||||||
board[i][j] = 2;
|
|
||||||
}else if (count > 3) {
|
|
||||||
board[i][j] = 2;
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
if (count == 3) {
|
|
||||||
board[i][j] = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < board.length; i++) {
|
|
||||||
for (int j = 0; j < board[0].length; j++) {
|
|
||||||
if (board[i][j] == 3) {
|
|
||||||
board[i][j] = 1;
|
|
||||||
} else if (board[i][j] == 2) {
|
|
||||||
board[i][j] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public int aliveCount(int[][] board, int i, int j) {
|
|
||||||
int res = 0;
|
|
||||||
for (int ti = i - 1; ti < i + 2; ti++) {
|
|
||||||
for (int tj = j - 1; tj < j + 2; tj++) {
|
|
||||||
if (ti == i && tj == j) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (ti >= 0 && ti < board.length && tj >= 0 && tj < board[0].length) {
|
|
||||||
if (board[ti][tj] == 1 || board[ti][tj] == 2) {
|
|
||||||
res++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
package cn.whaifree.redo.redo_all_241016;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/10/31 12:56
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode468 {
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
package cn.whaifree.redo.redo_all_241016;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 13:55
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
public class LeetCode49 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
String[] strs = {"abbbbbbbbbbb","aaaaaaaaaaab"};
|
|
||||||
List<List<String>> result = new Solution().groupAnagrams(strs);
|
|
||||||
for (List<String> list : result) {
|
|
||||||
System.out.println(list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Solution {
|
|
||||||
public List<List<String>> groupAnagrams(String[] strs) {
|
|
||||||
|
|
||||||
Map<String, List<String>> map = new HashMap<>();
|
|
||||||
for (int i = 0; i < strs.length; i++) {
|
|
||||||
|
|
||||||
int[] counts = new int[26];
|
|
||||||
String item = strs[i];
|
|
||||||
for (int j = 0; j < item.length(); j++) {
|
|
||||||
counts[item.charAt(j) - 'a']++;
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder str = new StringBuilder();
|
|
||||||
for (int j = 0; j < counts.length; j++) {
|
|
||||||
if (counts[j] != 0) {
|
|
||||||
str.append((char) ('a' + j)).append(counts[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!map.containsKey(str.toString())) {
|
|
||||||
map.put(str.toString(), new ArrayList<>());
|
|
||||||
}
|
|
||||||
map.get(str.toString()).add(strs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<List<String>> result = new ArrayList<>();
|
|
||||||
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
|
|
||||||
result.add(entry.getValue());
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -33,6 +33,7 @@ public class DynamicThreadPoolController {
|
|||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
|
|
||||||
|
|
||||||
executor = new ThreadPoolExecutor(
|
executor = new ThreadPoolExecutor(
|
||||||
Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 4, 10, TimeUnit.SECONDS,
|
Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 4, 10, TimeUnit.SECONDS,
|
||||||
new ArrayBlockingQueue<>(100),
|
new ArrayBlockingQueue<>(100),
|
||||||
@ -67,7 +68,6 @@ class DynamicThreadPoolConfig implements ApplicationListener<EnvironmentChangeEv
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onApplicationEvent(EnvironmentChangeEvent event) {
|
public void onApplicationEvent(EnvironmentChangeEvent event) {
|
||||||
System.out.println("DynamicThreadPoolConfig.onApplicationEvent");
|
|
||||||
if (event.getKeys().contains("dynamic.coreSize")) {
|
if (event.getKeys().contains("dynamic.coreSize")) {
|
||||||
// 获取值
|
// 获取值
|
||||||
Integer coreSize = threadConfigProperties.getCoreSize();
|
Integer coreSize = threadConfigProperties.getCoreSize();
|
||||||
|
@ -15,7 +15,7 @@ spring:
|
|||||||
# 配置所属命名空间的id,我们配置名称为dev的id,在命名空间列表查看id的值
|
# 配置所属命名空间的id,我们配置名称为dev的id,在命名空间列表查看id的值
|
||||||
namespace: 97ff159f-6177-4aab-b735-bd75458949d4
|
namespace: 97ff159f-6177-4aab-b735-bd75458949d4
|
||||||
# 文件名,如果没有配置则默认为 ${spring.application.name}
|
# 文件名,如果没有配置则默认为 ${spring.application.name}
|
||||||
# prefix: springboot3-nacos
|
prefix: springboot3-nacos
|
||||||
# 配置所属分组
|
# 配置所属分组
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
# 后缀名,只支持 properties 和 yaml 类型
|
# 后缀名,只支持 properties 和 yaml 类型
|
||||||
@ -24,9 +24,12 @@ spring:
|
|||||||
server-addr: localhost:8848
|
server-addr: localhost:8848
|
||||||
# 配置自动刷新
|
# 配置自动刷新
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
|
|
||||||
|
# 启用远程同步配置
|
||||||
|
enable-remote-sync-config: true
|
||||||
config:
|
config:
|
||||||
import:
|
import:
|
||||||
- optional:nacos:springboot3-nacos.${spring.cloud.nacos.config.file-extension}
|
- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
|
||||||
# Logger Config
|
# Logger Config
|
||||||
logging:
|
logging:
|
||||||
|
@ -1,25 +1,11 @@
|
|||||||
package com.whai.springcloud.serviceb.controller;
|
package com.whai.springcloud.serviceb.controller;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.cloud.nacos.NacosConfigManager;
|
|
||||||
import com.alibaba.nacos.api.config.ConfigService;
|
|
||||||
import com.alibaba.nacos.api.config.listener.Listener;
|
|
||||||
import com.alibaba.nacos.api.exception.NacosException;
|
|
||||||
import com.alibaba.nacos.shaded.com.google.common.util.concurrent.RateLimiter;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @Author whai文海
|
* @Author whai文海
|
||||||
@ -27,44 +13,13 @@ import java.util.concurrent.Executor;
|
|||||||
* @注释
|
* @注释
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RefreshScope
|
|
||||||
public class BProviderController {
|
public class BProviderController {
|
||||||
|
|
||||||
private final Environment environment;
|
private final Environment environment;
|
||||||
|
|
||||||
private RateLimiter rateLimiter;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public BProviderController(Environment environment, @Qualifier("nacosConfigManager") NacosConfigManager nacosConfigManager) {
|
public BProviderController(Environment environment) {
|
||||||
this.environment = environment;
|
this.environment = environment;
|
||||||
initRateLimiter();
|
|
||||||
ConfigService configService = nacosConfigManager.getConfigService();
|
|
||||||
try {
|
|
||||||
configService.addListener("cvm.reset.ratelimit", "DEFAULT_GROUP", new Listener() {
|
|
||||||
@Override
|
|
||||||
public Executor getExecutor() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void receiveConfigInfo(String configInfo) {
|
|
||||||
System.out.println("收到配置变更:cvm.reset.ratelimit" + configInfo);
|
|
||||||
rateLimiter.setRate(Double.parseDouble(configInfo));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (NacosException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@Value("${cvm.reset.ratelimit}")
|
|
||||||
private int rateLimitCount;
|
|
||||||
private void initRateLimiter() {
|
|
||||||
if (rateLimitCount <= 0) {
|
|
||||||
rateLimitCount = 1;
|
|
||||||
}
|
|
||||||
System.out.println("初始化限流器:" + rateLimitCount);
|
|
||||||
rateLimiter = RateLimiter.create(rateLimitCount);
|
|
||||||
}
|
}
|
||||||
// 提供服务
|
// 提供服务
|
||||||
@RequestMapping("/getB")
|
@RequestMapping("/getB")
|
||||||
@ -73,20 +28,4 @@ public class BProviderController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/CVM/reset")
|
|
||||||
public String reset(@RequestBody List<String> InstanceIds) {
|
|
||||||
System.out.println("当前限流数:" + rateLimiter.getRate());
|
|
||||||
List<String> succ = new ArrayList<>();
|
|
||||||
for (String instanceId : InstanceIds) {
|
|
||||||
if (rateLimiter.tryAcquire()) {
|
|
||||||
// 处理重置请求
|
|
||||||
succ.add(instanceId);
|
|
||||||
}else {
|
|
||||||
return "请求过于频繁,请稍后重试";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return StrUtil.format("重置成功,成功实例:{}", succ);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
spring:
|
spring:
|
||||||
|
|
||||||
application:
|
application:
|
||||||
name: ServiceB
|
name: ServiceB
|
||||||
cloud:
|
cloud:
|
||||||
@ -11,21 +12,23 @@ spring:
|
|||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
server-addr: localhost:8848
|
server-addr: localhost:8848
|
||||||
config:
|
config:
|
||||||
# 配置所属命名空间的id,我们配置名称为dev的id,在命名空间列表查看id的值
|
# ?????????id????????dev?id??????????id??
|
||||||
namespace: 97ff159f-6177-4aab-b735-bd75458949d4
|
namespace: 97ff159f-6177-4aab-b735-bd75458949d4
|
||||||
# 文件名,如果没有配置则默认为 ${spring.application.name}
|
# ?????????????? ${spring.application.name}
|
||||||
# prefix: springboot3-nacos
|
# prefix: springboot3-nacos
|
||||||
# 配置所属分组
|
# ??????
|
||||||
group: DEFAULT_GROUP
|
group: DEFAULT_GROUP
|
||||||
# 后缀名,只支持 properties 和 yaml 类型
|
# ??????? properties ? yaml ??
|
||||||
file-extension: yaml
|
file-extension: yaml
|
||||||
# nacos服务器地址
|
# nacos?????
|
||||||
server-addr: localhost:8848
|
server-addr: localhost:8848
|
||||||
# 配置自动刷新
|
# ??????
|
||||||
refresh-enabled: true
|
refresh-enabled: true
|
||||||
|
# ????????
|
||||||
|
enable-remote-sync-config: true
|
||||||
config:
|
config:
|
||||||
import:
|
import:
|
||||||
- optional:nacos:springboot3-nacos.${spring.cloud.nacos.config.file-extension}
|
- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}
|
||||||
|
|
||||||
# Logger Config
|
# Logger Config
|
||||||
logging:
|
logging:
|
||||||
@ -34,3 +37,4 @@ logging:
|
|||||||
|
|
||||||
hexadecimal:
|
hexadecimal:
|
||||||
name: whai
|
name: whai
|
||||||
|
# --server.port=12139
|
||||||
|
@ -31,13 +31,6 @@
|
|||||||
<spring-cloud.version>2023.0.3</spring-cloud.version>
|
<spring-cloud.version>2023.0.3</spring-cloud.version>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<!-- Lombok -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.projectlombok</groupId>
|
|
||||||
<artifactId>lombok</artifactId>
|
|
||||||
<version>1.18.30</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<!--hutool-->
|
<!--hutool-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
|
@ -38,8 +38,14 @@
|
|||||||
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
|
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
<version>3.5.9</version>
|
<version>3.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!--mybatis-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.xiaoymin</groupId>
|
<groupId>com.github.xiaoymin</groupId>
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
package cn.whaifree.springdemo.config;
|
|
||||||
|
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 12:41
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
@MapperScan("cn.whaifree.springdemo.mybatis.mapper")
|
|
||||||
public class MybatisConfig {
|
|
||||||
|
|
||||||
}
|
|
@ -1,138 +0,0 @@
|
|||||||
//package cn.whaifree.springdemo.tech;
|
|
||||||
//
|
|
||||||
//import jakarta.annotation.Resource;
|
|
||||||
//import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
//import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
|
||||||
//import org.springframework.context.annotation.Lazy;
|
|
||||||
//import org.springframework.context.annotation.Scope;
|
|
||||||
//import org.springframework.stereotype.Component;
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * @version 1.0
|
|
||||||
// * @Author whai文海
|
|
||||||
// * @Date 2024/10/31 13:57
|
|
||||||
// * @注释
|
|
||||||
// */
|
|
||||||
//public class CircleRelation {
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//// ================================================================
|
|
||||||
//
|
|
||||||
//@Component
|
|
||||||
////@Scope("prototype")
|
|
||||||
//class A1{
|
|
||||||
//// @Resource
|
|
||||||
//// public B1 b1;
|
|
||||||
//
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("cn.whaifree.springdemo.tech");
|
|
||||||
//// A1 bean = context.getBean(A1.class);
|
|
||||||
//// System.out.println(bean.b1.a1);
|
|
||||||
//
|
|
||||||
//// LazyA1 lazyA1 = context.getBean(LazyA1.class);
|
|
||||||
//// System.out.println(lazyA1.b1);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * BeanCurrentlyInCreationException:
|
|
||||||
// * Error creating bean with name 'a1':
|
|
||||||
// * Requested bean is currently in creation: Is there an unresolvable circular reference?
|
|
||||||
// *
|
|
||||||
// * A 实例创建后,populateBean 时,会触发 B 的加载。
|
|
||||||
// * B 实例创建后,populateBean 时,会触发 A 的加载。由于 A 的 scope=prototype,需要的时候都会创建一个全新的 A。
|
|
||||||
// * 这样,就会进入一个死循环。Spring 肯定是解决不了这种情况下的循环依赖的。所以,提前进行了 check,并抛出了异常。
|
|
||||||
// *
|
|
||||||
// * A需要一个新的B,B需要一个新的A,不能用为初始化的A活着B
|
|
||||||
// */
|
|
||||||
//@Component
|
|
||||||
////@Scope("prototype")
|
|
||||||
//class B1{
|
|
||||||
// @Resource
|
|
||||||
// public A1 a1;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//@Component
|
|
||||||
//@Scope("prototype")
|
|
||||||
//class LazyA1{
|
|
||||||
//
|
|
||||||
// @Autowired
|
|
||||||
// @Lazy
|
|
||||||
// public LazyB1 b1;
|
|
||||||
//}
|
|
||||||
///**
|
|
||||||
// *
|
|
||||||
// */
|
|
||||||
//@Component
|
|
||||||
//@Scope("prototype")
|
|
||||||
//class LazyB1{
|
|
||||||
// @Autowired
|
|
||||||
// public LazyA1 a1;
|
|
||||||
//}
|
|
||||||
//// ================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//@Component
|
|
||||||
//class ConstructA {
|
|
||||||
// ConstructB b;
|
|
||||||
// public ConstructA(@Lazy ConstructB b) {
|
|
||||||
// this.b = b;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//@Component
|
|
||||||
//class ConstructB {
|
|
||||||
// ConstructA a;
|
|
||||||
// public ConstructB(ConstructA a) {
|
|
||||||
// this.a = a;
|
|
||||||
// }
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// /**
|
|
||||||
// * A 实例在创建时(createBeanInstance),由于是构造注入,这时会触发 B 的加载。
|
|
||||||
// * B 实例在创建时(createBeanInstance),又会触发 A 的加载,此时,A 还没有添加到三级缓存(工厂)中,所以就会创建一个全新的 A。
|
|
||||||
// * 这样,就会进入一个死循环。Spring 是解决不了这种情况下的循环依赖的。所以,提前进行了 check,并抛出了异常。
|
|
||||||
// *
|
|
||||||
// * 解决:@Lazy放在构造器上,这样,A 实例在创建时,不会触发 B 的加载。
|
|
||||||
// *
|
|
||||||
// * 构造函数注入要求在创建bean实例时必须提供所有依赖
|
|
||||||
// *
|
|
||||||
// */
|
|
||||||
// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("cn.whaifree.springdemo.tech");
|
|
||||||
// ConstructA bean = context.getBean(ConstructA.class);
|
|
||||||
// System.out.println(bean.b);
|
|
||||||
// // Unsatisfied dependency expressed through constructor parameter 0:
|
|
||||||
// // Error creating bean with name 'constructA': Requested bean is currently in creation: Is there an unresolvable circular reference?
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//@Component
|
|
||||||
//class SetA {
|
|
||||||
// SetB b;
|
|
||||||
//
|
|
||||||
// @Autowired
|
|
||||||
// public void setB(SetB b) {
|
|
||||||
// this.b = b;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//@Component
|
|
||||||
//class SetB {
|
|
||||||
//
|
|
||||||
// SetA a;
|
|
||||||
//
|
|
||||||
// @Autowired
|
|
||||||
// public void setA(SetA a) {
|
|
||||||
// this.a = a;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
//
|
|
||||||
// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("cn.whaifree.springdemo.tech");
|
|
||||||
// SetA bean = context.getBean(SetA.class);
|
|
||||||
// System.out.println(bean.b);
|
|
||||||
// }
|
|
||||||
//}
|
|
@ -40,6 +40,8 @@ spring:
|
|||||||
direct:
|
direct:
|
||||||
acknowledge-mode: manual
|
acknowledge-mode: manual
|
||||||
|
|
||||||
|
mybatis:
|
||||||
|
mapper-locations: '"classpath:/mapper/**.xml"'
|
||||||
mybatis-plus:
|
mybatis-plus:
|
||||||
configuration:
|
configuration:
|
||||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||||
@ -47,7 +49,6 @@ mybatis-plus:
|
|||||||
db-config:
|
db-config:
|
||||||
logic-delete-field: 1
|
logic-delete-field: 1
|
||||||
logic-not-delete-value: 0
|
logic-not-delete-value: 0
|
||||||
mapper-locations: "classpath:/mapper/**.xml"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
package cn.whaifree.springdemo.MybatisTest;
|
|
||||||
|
|
||||||
import cn.whaifree.springdemo.mybatis.domain.Orders;
|
|
||||||
import cn.whaifree.springdemo.mybatis.mapper.OrdersMapper;
|
|
||||||
import cn.whaifree.springdemo.mybatis.service.OrdersService;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author whai文海
|
|
||||||
* @Date 2024/11/1 12:43
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
@SpringBootTest
|
|
||||||
public class MybatisTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private OrdersService ordersService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private OrdersMapper ordersMapper;
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
|
|
||||||
List<Orders> orders = ordersMapper.selectList(null);
|
|
||||||
System.out.println(orders);
|
|
||||||
List<Orders> orders1 = ordersMapper.selectByExample();
|
|
||||||
System.out.println(orders1);
|
|
||||||
}
|
|
||||||
}
|
|
2
pom.xml
2
pom.xml
@ -7,7 +7,7 @@
|
|||||||
<groupId>org.example</groupId> <!--groupId表示当前 Maven 项目隶属的组织或公司-->
|
<groupId>org.example</groupId> <!--groupId表示当前 Maven 项目隶属的组织或公司-->
|
||||||
<artifactId>LeetCode</artifactId> <!--当前 Maven 项目的名称-->
|
<artifactId>LeetCode</artifactId> <!--当前 Maven 项目的名称-->
|
||||||
<version>1.0-SNAPSHOT</version><!--定义了 Maven 项目当前所处版本-->
|
<version>1.0-SNAPSHOT</version><!--定义了 Maven 项目当前所处版本-->
|
||||||
<packaging>jar</packaging>
|
<packaging>pom</packaging>
|
||||||
<modules>
|
<modules>
|
||||||
<module>ForJdk8</module>
|
<module>ForJdk8</module>
|
||||||
<module>ForJdk17</module>
|
<module>ForJdk17</module>
|
||||||
|
Loading…
Reference in New Issue
Block a user