vite.config.ts.ftl(Vite 项目配置模板参考示例)

华为OD机试真题 2026.11.4. 新系统 【河流水系流量评估】 华为OD机试真题 新系统【河流水系流量评估】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【河流水系流量评估】多语言题解。 阅读详情

✅ vite.config.ts.ftl 模板文件 —— Vite 项目配置模板

强烈推荐创建此模板文件!Vite 配置是现代前端项目的核心基础设施,直接影响 开发体验、构建性能、安全性和部署灵活性。通过模板自动生成标准化配置,可确保团队项目配置一致性,避免重复配置错误,提升工程化水平。


📋 为什么需要 vite.config.ts.ftl?

问题手动配置风险模板生成优势
配置重复每个项目都要重写基础配置一次定义,处处生成
环境差异开发/测试/生产环境配置混乱自动适配环境变量
安全漏洞忘记配置安全头、CSP 策略集成安全最佳实践
性能问题未优化构建配置自动生成性能优化配置
维护困难配置分散、文档缺失集中管理,注释完整

💡 核心价值:标准化 + 安全性 + 性能优化 + 环境适配


📄 详细说明文档

1. 配置架构设计

Vite 配置
基础配置
开发服务器配置
构建配置
插件配置
项目元信息
路径别名
环境变量
代理配置
HTTPS 支持
输出目录
代码分割
压缩优化
Vue 插件
TypeScript 插件
CSS 预处理器
分析插件

2. 关键功能覆盖

  • ✅ 基础配置:项目信息、路径别名、环境变量
  • ✅ 开发体验:代理、HTTPS、热更新
  • ✅ 构建优化:代码分割、压缩、Tree Shaking
  • ✅ 安全加固:CSP、安全头、敏感信息过滤
  • ✅ 监控分析:包体积分析、性能监控
  • ✅ 环境适配:开发/测试/生产差异化配置

3. 企业级最佳实践

  • 🌐 环境变量管理:.env 文件分级管理
  • 🔒 安全配置:Content Security Policy、安全响应头
  • ⚡ 性能优化:预加载、代码分割、资源压缩
  • 📊 监控集成:包体积分析、错误监控
  • 🚀 部署友好:静态资源 CDN、缓存策略

📝 具有实际开发参考意义的示例

import { defineConfig, loadEnv, ConfigEnv, UserConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import { createHtmlPlugin } from 'vite-plugin-html';
import { visualizer } from 'rollup-plugin-visualizer';
import { compression } from 'vite-plugin-compression';
import { resolve } from 'path';

/**
 * Vite 项目配置
 *
 * 【设计目标】
 * 1. 提供标准化的项目配置模板
 * 2. 集成企业级安全和性能最佳实践
 * 3. 支持多环境差异化配置
 * 4. 优化开发体验和构建性能
 *
 * 【配置原则】
 * - 环境变量驱动:通过 .env 文件管理配置
 * - 安全优先:集成 CSP、安全头等防护措施
 * - 性能优化:代码分割、压缩、预加载
 * - 可维护性:详细注释,模块化配置
 *
 * @author ${author}
 * @since ${date}
 */
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  // 加载环境变量(.env.${mode})
  const env = loadEnv(mode, process.cwd());
  
  return {
    // ==================== 基础配置 ====================
    
    /**
     * 项目根目录
     * 
     * <p>
     * 【说明】
     * - 默认为当前工作目录
     * - 通常不需要修改
     * </p>
     */
    root: process.cwd(),
    
    /**
     * 项目元信息
     * 
     * <p>
     * 【用途】
     * - 生成 package.json 中的 name/version
     * - HTML 模板中使用
     * </p>
     */
    define: {
      __APP_NAME__: JSON.stringify(env.VITE_APP_NAME || '${projectName}'),
      __APP_VERSION__: JSON.stringify(env.VITE_APP_VERSION || '1.0.0'),
      __BUILD_TIME__: JSON.stringify(new Date().toISOString())
    },
    
    /**
     * 路径别名配置
     * 
     * <p>
     * 【最佳实践】
     * - @ 指向 src 目录
     * - ~ 指向 public 目录(静态资源)
     * - 避免相对路径 ../../../../../
     * </p>
     * 
     * <p>
     * 【使用示例】
     * import MyComponent from '@/components/MyComponent.vue';
     * </p>
     */
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
        '~': resolve(__dirname, 'public')
      },
      // 强制解析为浏览器版本(避免 Node.js 模块)
      mainFields: ['module', 'jsnext:main', 'jsnext'],
      // 扩展名自动补全
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    },
    
    /**
     * CSS 配置
     * 
     * <p>
     * 【预处理器】
     * - 支持 Sass/SCSS、Less、Stylus
     * - 自动注入全局变量文件
     * </p>
     */
    css: {
      preprocessorOptions: {
        scss: {
          // 全局 SCSS 变量(无需在每个文件中 @import)
          additionalData: `@use "@/styles/variables.scss" as *;`
        }
      },
      // PostCSS 配置(自动添加浏览器前缀)
      postcss: {
        plugins: [
          require('autoprefixer')({
            overrideBrowserslist: [
              '> 1%',
              'last 2 versions',
              'not dead',
              'iOS >= 10',
              'Android >= 5'
            ]
          })
        ]
      }
    },
    
    // ==================== 开发服务器配置 ====================
    
    /**
     * 本地开发服务器配置
     * 
     * <p>
     * 【关键配置】
     * - host: 0.0.0.0 允许局域网访问
     * - port: 开发端口(可被 .env 覆盖)
     * - open: 自动打开浏览器
     * - proxy: API 代理配置
     * </p>
     */
    server: {
      // 允许局域网访问(移动端调试)
      host: '0.0.0.0',
      // 开发端口
      port: Number(env.VITE_PORT) || 3000,
      // 自动打开浏览器
      open: true,
      // 严格端口检查(端口被占用时退出)
      strictPort: true,
      // HTTPS 支持(开发环境调试 HTTPS API)
      https: env.VITE_HTTPS === 'true',
      // API 代理配置(解决跨域问题)
      proxy: {
        // 代理所有 /api 开头的请求
        '/api': {
          target: env.VITE_API_TARGET || 'http://localhost:8080',
          changeOrigin: true,
          // 重写路径(移除 /api 前缀)
          rewrite: (path) => path.replace(/^\/api/, ''),
          // 开发环境日志
          configure: (proxy, options) => {
            if (env.VITE_PROXY_LOG === 'true') {
              console.log('🚀 [Proxy]', options.target + options.path);
            }
          }
        }
      },
      // 文件监听配置(解决大项目监听文件过多问题)
      watch: {
        ignored: ['**/node_modules/**', '**/dist/**']
      }
    },
    
    // ==================== 构建配置 ====================
    
    /**
     * 构建配置
     * 
     * <p>
     * 【输出目录】
     * - 默认为 dist
     * - 可通过 .env 覆盖
     * </p>
     */
    build: {
      // 输出目录
      outDir: env.VITE_BUILD_OUT_DIR || 'dist',
      // 静态资源输出目录
      assetsDir: 'assets',
      // 生成 sourcemap(生产环境建议关闭)
      sourcemap: mode === 'development',
      // 报告未压缩的包体积
      reportCompressedSize: true,
      // 禁用 minify(调试时使用)
      minify: env.VITE_BUILD_MINIFY !== 'false',
      // 代码分割配置
      rollupOptions: {
        output: {
          // 静态资源文件名(带 hash)
          assetFileNames: (assetInfo) => {
            let extType = assetInfo.name?.split('.').at(-1);
            if (/png|jpe?g|gif|svg|webp/.test(extType!)) {
              extType = 'img';
            }
            return `assets/${extType}/[name]-[hash][extname]`;
          },
          // 代码分割(按路由拆分)
          chunkFileNames: (chunkInfo) => {
            const facadeModuleId = chunkInfo.facadeModuleId ?
              chunkInfo.facadeModuleId.split('/').at(-2) :
              'unknown';
            return `js/${facadeModuleId}/[name]-[hash].js`;
          },
          // 入口文件
          entryFileNames: 'js/[name]-[hash].js'
        }
      },
      // 预加载策略
      dynamicImportVarsOptions: {
        // 预加载动态导入的模块
        exclude: [/node_modules/]
      },
      // 目标浏览器(影响代码转译)
      target: 'es2015',
      // 启用 CSS 代码分割
      cssCodeSplit: true,
      // 启用 brotli 压缩(需要额外插件)
      brotliSize: false
    },
    
    // ==================== 插件配置 ====================
    
    /**
     * Vite 插件配置
     * 
     * <p>
     * 【插件说明】
     * - @vitejs/plugin-vue: Vue 3 支持
     * - @vitejs/plugin-vue-jsx: Vue JSX 支持
     * - vite-plugin-html: HTML 模板注入
     * - vite-plugin-compression: Gzip/Brotli 压缩
     * - rollup-plugin-visualizer: 包体积分析
     * </p>
     */
    plugins: [
      // Vue 3 支持
      vue(),
      
      // Vue JSX 支持(可选)
      vueJsx(),
      
      // HTML 模板注入(注入环境变量到 HTML)
      createHtmlPlugin({
        inject: {
          data: {
            title: env.VITE_APP_TITLE || '${projectName}',
            description: env.VITE_APP_DESCRIPTION || '${projectName} 管理系统',
            // 注入 CSP nonce(如果启用 CSP)
            cspNonce: env.VITE_CSP_NONCE || ''
          }
        }
      }),
      
      // Gzip 压缩(生产环境)
      ...(mode === 'production' ? [compression({
        algorithm: 'gzip',
        threshold: 10240, // 大于 10KB 的文件才压缩
        deleteOriginFile: false // 保留原始文件
      })] : []),
      
      // 包体积分析(仅在分析模式下启用)
      ...(env.VITE_ANALYZE === 'true' ? [visualizer({
        open: true,
        gzipSize: true,
        brotliSize: true,
        filename: 'stats.html'
      })] : [])
    ],
    
    // ==================== 安全配置 ====================
    
    /**
     * 安全相关配置
     * 
     * <p>
     * 【Content Security Policy】
     * - 开发环境:宽松策略
     * - 生产环境:严格策略
     * </p>
     * 
     * <p>
     * 【安全响应头】
     * - 通过 nginx 或中间件设置
     * - Vite 开发服务器不支持设置响应头
     * </p>
     */
    // 注意:CSP 通常在 HTML meta 标签或服务器响应头中设置
    // 此处仅提供配置参考
    ...(env.VITE_CSP_ENABLED === 'true' ? {
      // CSP 配置(需要配合 HTML 模板)
      define: {
        __CSP_POLICY__: JSON.stringify(
          mode === 'development' 
            ? "default-src 'self' 'unsafe-inline' 'unsafe-eval';"
            : "default-src 'self'; script-src 'self' 'nonce-${cspNonce}'; style-src 'self' 'unsafe-inline';"
        )
      }
    } : {}),
    
    // ==================== 其他配置 ====================
    
    /**
     * 预加载配置
     * 
     * <p>
     * 【用途】
     * - 预加载关键资源
     * - 提升首屏加载速度
     * </p>
     */
    optimizeDeps: {
      // 预构建依赖(提升冷启动速度)
      include: [
        'vue',
        'vue-router',
        'pinia',
        'element-plus',
        'axios',
        'lodash-es'
      ],
      // 排除不需要预构建的依赖
      exclude: [
        // 大型库或按需加载的库
      ]
    },
    
    /**
     * 日志级别
     * 
     * <p>
     * 【选项】
     * - info: 默认
     * - warn: 仅警告
     * - error: 仅错误
     * - silent: 无日志
     * </p>
     */
    logLevel: env.VITE_LOG_LEVEL || 'info',
    
    /**
     * 清除控制台日志
     * 
     * <p>
     * 【用途】
     * - 生产环境构建时清除 console.log
     * - 需要额外插件支持
     * </p>
     */
    ...(mode === 'production' && env.VITE_DROP_CONSOLE === 'true' ? {
      esbuild: {
        drop: ['console', 'debugger']
      }
    } : {})
  };
});

🔍 关键设计说明

1. 环境变量驱动配置

  • .env 文件分级:
    • .env:通用配置
    • .env.development:开发环境
    • .env.production:生产环境
  • 配置覆盖顺序:.env.${mode} > .env

2. 安全加固策略

  • Content Security Policy (CSP):
    • 开发环境:宽松策略(支持热更新)
    • 生产环境:严格策略(防止 XSS)
  • 安全响应头:
    • 通过 Nginx 设置(X-Frame-Options、X-Content-Type-Options 等)
  • 敏感信息过滤:
    • 构建时移除 console.log(可选)

3. 性能优化措施

  • 代码分割:按路由和模块拆分
  • 资源压缩:Gzip/Brotli 压缩
  • 预加载:关键资源预加载
  • Tree Shaking:自动移除未使用代码

4. 开发体验优化

  • API 代理:解决跨域问题
  • HTTPS 支持:调试 HTTPS API
  • 局域网访问:移动端调试
  • 自动打开浏览器:提升开发效率

5. 监控与分析

  • 包体积分析:rollup-plugin-visualizer
  • 构建报告:压缩前后体积对比
  • 错误监控:集成 Sentry 等(需额外配置)

🛠️ 配套环境变量文件示例

.env

# 通用配置
VITE_APP_NAME=${projectName}
VITE_APP_VERSION=1.0.0
VITE_PORT=3000
VITE_LOG_LEVEL=info

.env.development

# 开发环境配置
VITE_API_TARGET=http://localhost:8080
VITE_PROXY_LOG=true
VITE_HTTPS=false
VITE_CSP_ENABLED=false

.env.production

# 生产环境配置
VITE_API_TARGET=https://api.yourdomain.com
VITE_BUILD_OUT_DIR=dist
VITE_BUILD_MINIFY=true
VITE_CSP_ENABLED=true
VITE_CSP_NONCE=${randomNonce}
VITE_DROP_CONSOLE=true
VITE_ANALYZE=false

📝 使用说明

1. 生成配置文件

# 通过代码生成器生成
mybatis-plus-generator --template vite.config.ts.ftl

2. 自定义配置

  • 修改 .env 文件覆盖默认配置
  • 在模板中添加 <!-- CUSTOM CODE START --> 区域进行扩展

3. 分析包体积

# 生成包体积分析报告
VITE_ANALYZE=true npm run build

4. 生产构建

# 标准生产构建
npm run build

# 调试构建(不压缩)
VITE_BUILD_MINIFY=false npm run build

✅ 此模板文件是 现代前端项目的基础设施,正确配置后可:

  • 提升开发体验:热更新、代理、HTTPS 支持
  • 优化构建性能:代码分割、压缩、Tree Shaking
  • 增强系统安全:CSP、安全头、敏感信息过滤
  • 降低维护成本:标准化配置,团队一致性

可直接用于企业级项目,是高质量前端工程的必备组件。

智能车数字图像处理算法入门及C语言实现 智能车图像的最最基本入门算法介绍及C语言实现,二值化 - 特征识别 - 补线 - 中心巡线 - 偏差曲率计算。 阅读详情

相关推荐

使用Java实现CRC16 MODBUS 格式校验

CRC16校验,测试如下 String str = "a5 98 03 00 00 5f c6 0f 7c 40 78 06 09 46 dc 6e db 00 16 3e 12 5c 98 00 19 98 0e 10 03 06 09 46 dc 6e db 03 0b bf 5f c6 0f 7c 43 bd b9 61 ee 96 76 99"; 校验规则: /** * CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结

weixin_45063710的博客 1312

vite功能之---内容安全策略(CSP)

vite功能之---内容安全策略(CSP)

weixin_47808575的博客 1555

当MATLAB遇见ROS2:一场跨平台实时仿真的技术融合与创新实践

本文探讨了MATLAB/Simulink与ROS2在跨平台实时仿真中的技术融合与创新实践。重点介绍了在Windows+WSL2异构环境下构建高可靠性联合仿真系统的架构设计、PX4仿真环境与DDS中间件的集成方法,以及MATLAB R2024b对ROS2深度集成的实战技巧,为复杂机器人系统的开发提供了高效解决方案。

rum55的博客 244

Vite + JavaScript最佳实践:10个你必须知道的工程化技巧

掌握Vite + JavaScript最佳实践,提升前端开发效率。本文深入解析JavaScript Vite用法,涵盖项目搭建、热更新优化、插件配置等10个工程化技巧,适用于现代Web开发场景。构建提速与开发体验双提升,值得收藏。

LiteCode的博客 1079

Howland电流源电路:从理论到实践的深度解析与优化策略

本文深度解析了Howland电流源电路的工作原理,从经典四电阻架构的“虚短”“虚断”分析,到其实现宽带恒流输出的理论优势。重点剖析了实践中因电阻精度、运放参数及PCB布局导致的性能瓶颈,并提供了引入第五电阻、优化运放选型等关键优化策略,旨在将输出阻抗从kΩ级提升至MΩ级,以满足精密测量与传感器驱动等应用需求。

weixin_29243063的博客 441

【ZZULIOJ】郑州轻工业大学oj题解整合

写在前面 关于ZZULIOJ题解 学习编程,想要巩固无非就是刷题或者做项目,然后因为我大一开始是刷郑轻的题目,就想着自己整合一下自己写的题目。既是复习也是笔记吧。 题解(内有题目描述) 1000 整数a+b 1001 植树问题 1002 简单多项式求值 1003 两个整数的四则运算 1004 三位数的数位分离 1005 整数幂 1006 求等差数列的和 1007 鸡兔同笼 1008 美元和人民币 1009 求平均分 1010 求圆的周长和面积 1011 圆柱体表面积 1012 求绝对值 1013 求两点间

蒟蒻乱写的博客 29万+

axios-config.ts.ftl(Axios 全局配置模板文件参考)

Axios全局配置模板(axios-config.ts.ftl)说明 该模板提供标准化的Axios配置,确保API调用的可靠性、安全性和一致性。核心优势包括:避免重复配置、统一错误处理、集成安全防护(如自动添加JWT Token)、支持环境差异化(开发/生产环境)。通过请求/响应拦截器实现认证头注入、敏感信息过滤、错误分级处理(网络/HTTP/业务错误)及调试日志。模板设计强调可维护性,集中管理基础配置、认证逻辑和异常处理,显著提升开发效率并降低维护成本。

python15397的博客 1088

Python读取ECMWF grib数据;Anaconda配置eccodes和cfgrib环境及安装过程

python读取grib数据,eccodes,cfgrib安装。

qq_36714629的博客 2243

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 215

MySQL 一一 MySQL基本使用

1、数据库 简单来说,所谓的数据库就是存储数据的容器,而且是永久存储的。 2、为什么需要数据库 3、为什么要学习MySQL数据库 最早MySQL数据,瑞典AB公司开发的一款开源型的关系型数据库。 随着时间的推移,瑞典AB公司把MySQL数据库转让给Sun公司(Java语言的创始公司) 后来,Sun公司经营不善,又把MySQL数据库转让给甲骨文公司(Oracle数据库) 4、数

Guizy 7万+

运维系列【仅供参考】: Windos10和Windos11 配置intel网卡vlan的方法

Windos10和Windos11 配置intel网卡vlan的方法

weixin_54626591的博客 474

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 325

Day 01: 与Python的第一次亲密接触

环境搭建 、第一个程序 Hello, World!、以及Python之禅 (The Zen of Python) 的解读。

杨小扩的博客 220

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 140

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 112

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 190

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 102

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 608

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 392

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 369

java框架大全

java框架大全

qq_39326137的博客 180

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 291

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 313

Agent 状态栏在上下文中的具体位置

Agent状态栏以user角色消息形式追加至上下文末尾,而非修改system消息,避免破坏KVCache。此举仅为API技术实现,内容由框架自动生成,非真实用户输入,通过<agent_status>标签标识,确保模型获取最新状态且不影响缓存。该设计遵循“动态信息追加、静态信息固定”原则,实现高效、低延迟的状态传递。

lj1109053360的专栏 68

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 301

Spring事务和事务传播机制

3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别.p1事务可以认为是⽗事务, 嵌套事务是⼦事务. ⽗事务出现异常, ⼦事务也会回滚, ⼦事务出现异常, 如果不进⾏处理, 也会导致⽗事务回滚.

txxzjmzlh的博客 202
上一篇: table.vue.ftl 和 form.vue.ftl 两个核心前端页面模板文件参考示例2
下一篇: dto.java.ftl 和 vo.java.ftl 两个核心数据传输对象模板文件1
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值