Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单实例Primary快速搭建Standby RAC参考手册(19.16 ADG)

单实例Primary快速搭建Standby RAC参考手册(19.16 ADG)

作者头像
Alfred Zhao
发布于 2023-03-06 08:14:52
发布于 2023-03-06 08:14:52
39700
代码可运行
举报
运行总次数:0
代码可运行

环境:Single Instance -> RAC

Single Instance:

  • db_name=demo
  • db_unique_name=demo
  • instance_name=demo
  • service_names=demo

RAC(2 nodes):

  • db_name=demo
  • db_unique_name=demorac
  • instance_name=jydb1、jydb2
  • service_names=demorac

上述为这里我做为演示环境的基本规划。

本文作为step by step的快速指导手册,方便快速部署此类ADG环境。

依据之前的文章

历史文章步骤已经很全且描述的很细致,本篇复用之前的章节风格,尽可能简洁化,方便熟练后直接引用。

关于前两部分:这里默认准备就绪:

  • Single Instance作为初始的primary端,已经安装好19.16的软件和数据库
  • RAC作为初始的standby端,已经安装好19.16的软件

对于后面的章节,列举如下:

3.主库配置

3.1 数据库归档模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlplus / as sysdba
startup mount
alter database archivelog;
alter database open;

3.2 Force Logging

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter database force logging;
select FORCE_LOGGING FROM V$DATABASE;

3.3 主库参数文件修改

使用下面语句查询现在DG相关参数的设置情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set linesize 500
col value for a70
col name for a50
 
select name, value
from v$parameter
where name in ('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2',
               'log_archive_dest_state_1','log_archive_dest_state_2', 'remote_login_passwordfile',
               'log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert',
                     'log_file_name_convert', 'standby_file_management');

修改参数值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter system set log_archive_config= 'DG_CONFIG=(demo,demorac)';
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=demo';
alter system set log_archive_dest_2='SERVICE=demorac VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=demorac';
alter system set log_archive_dest_state_1=enable;
alter system set log_archive_dest_state_2=enable;
alter system set FAL_SERVER='demorac';
alter system set db_file_name_convert='+DATADG/demorac','/flash/oradata/DEMO' scope=spfile;
alter system set log_file_name_convert='+DATADG/demorac','/flash/oradata/DEMO','+ARCHDG/DEMORAC','/flash/fast_recovery_area/DEMO' scope=spfile;
alter system set standby_file_management=AUTO; 

3.4 创建SRLs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select member from v$logfile;

alter database add standby logfile thread 1 group 11 '/flash/oradata/DEMO/standby_group_11.log' size 209715200;
alter database add standby logfile thread 1 group 12 '/flash/oradata/DEMO/standby_group_12.log' size 209715200;
alter database add standby logfile thread 1 group 13 '/flash/oradata/DEMO/standby_group_13.log' size 209715200;
alter database add standby logfile thread 1 group 14 '/flash/oradata/DEMO/standby_group_14.log' size 209715200;

alter database add standby logfile thread 2 group 21 '/flash/oradata/DEMO/standby_group_21.log' size 209715200;
alter database add standby logfile thread 2 group 22 '/flash/oradata/DEMO/standby_group_22.log' size 209715200;
alter database add standby logfile thread 2 group 23 '/flash/oradata/DEMO/standby_group_23.log' size 209715200;
alter database add standby logfile thread 2 group 24 '/flash/oradata/DEMO/standby_group_24.log' size 209715200;

select * from v$standby_log;

3.5 备份数据库

采用duplicate方式创建备库,无需手工备份数据库。

3.6 创建备库参数文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create pfile='pfile_for_standby.txt' from spfile;

默认存在$ORACLE_HOME/dbs目录下。

3.7 更新tnsnames.ora文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEMO =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = demo)
    )
  )

LISTENER_DEMO =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT = 1521))

DEMORAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.15)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = demorac)
    )
  )

DEMORAC1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.13)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = demorac)
      (SID = jydb1)
    )
  )

DEMORAC2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = demorac)
      (SID = jydb2)
    )
  )

LISTENER_DEMORAC1 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.13)(PORT = 1521))

LISTENER_DEMORAC2 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.14)(PORT = 1521))

这里需要注意service_name,sid的配置符合部署环境要求,然后同步该文件到备库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon admin]$ scp tnsnames.ora 192.168.1.11:/u01/app/oracle/product/19.3.0/db_1/network/admin
[oracle@bogon admin]$ scp tnsnames.ora 192.168.1.12:/u01/app/oracle/product/19.3.0/db_1/network/admin

4.备库配置

4.1 拷贝主库参数文件

拷贝主库参数文件到备库所有节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon dbs]$ scp pfile_for_standby.txt 192.168.1.11:/u01/app/oracle/product/19.3.0/db_1/dbs
[oracle@bogon dbs]$ scp pfile_for_standby.txt 192.168.1.12:/u01/app/oracle/product/19.3.0/db_1/dbs

4.2 拷贝密码文件

拷贝主库密码文件到备库所有节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[oracle@bogon dbs]$ scp orapwdemo 192.168.1.11:/u01/app/oracle/product/19.3.0/db_1/dbs/orapwjydb1
[oracle@bogon dbs]$ scp orapwdemo 192.168.1.12:/u01/app/oracle/product/19.3.0/db_1/dbs/orapwjydb2

注意:

  1. 密码文件的命名方式orapw<sid>;
  2. 如果主库也是RAC,那需要pwcopy命令从ASM磁盘组中拷贝到文件系统上,这里主库是单实例,不需要。

4.3 创建备库需要的目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Using Oracle User, On all nodes:
mkdir -p /u01/app/oracle/admin/demorac/adump

4.4 修改备库参数文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*.audit_file_dest='/u01/app/oracle/admin/demorac/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='+DATADG'
#*.control_files='+DATADG/DEMORAC/CONTROLFILE/current.256.1127325539'#Restore Controlfile
*.db_block_size=8192
*.db_file_name_convert='/flash/oradata/DEMO','+DATADG/DEMORAC'
*.db_name='demo'
*.db_unique_name='demorac'
*.db_recovery_file_dest='+ARCHDG'
*.db_recovery_file_dest_size=15360m
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=demoracXDB)'
*.enable_pluggable_database=true
*.fal_server='demo'
jydb1.local_listener='LISTENER_DEMORAC1'
jydb2.local_listener='LISTENER_DEMORAC2'
*.remote_listener='db01rac-scan:1521'
*.log_archive_config='DG_CONFIG=(demo,demorac)'
*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=demorac'
*.log_archive_dest_2='SERVICE=demo VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=demo'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='/flash/oradata/DEMO','+DATADG/DEMORAC','/flash/fast_recovery_area/DEMO','+ARCHDG/DEMORAC'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=2048m
*.processes=2560
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4096m
*.standby_file_management='AUTO'
*.cluster_database=TRUE
jydb1.instance_number=1
jydb2.instance_number=2
jydb1.thread=1
jydb2.thread=2
jydb1.undo_tablespace='UNDOTBS1'
jydb2.undo_tablespace='UNDOTBS2'

注意:这里添加了新的参数,比如:cluster_database、db_unique_name、remote_listener、jydb1.、jydb2. 等参数,另外按照ADG要求修改之前相关配置,检查确认符合要求即可。

4.5 拷贝tnsnames.ora文件

在3.7步骤中已同步完成,检查已同步成功即可。

4.6 创建ASM相关目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ASMCMD> mkdir +datadg/DEMORAC
ASMCMD> cd +datadg/DEMORAC
ASMCMD> mkdir PDBSEED PDB1 PDB2

注意:这里测试过,如果不创建这些子目录在duplicate时会报错对应的目录条目不存在。

5.备库恢复数据库

5.1 使用启动实例到nomount状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlplus / as sysdba
startup nomount pfile=$ORACLE_HOME/dbs/pfile_for_standby.txt

5.2 初始化standby数据库

使用duplicate命令创建standby数据库,需要临时配置静态监听。

静态监听配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[grid@db01rac1 admin]$ pwd
/u01/app/19.3.0/grid/network/admin
[grid@db01rac1 admin]$ vi listener.ora  尾部增加内容:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = demorac)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_1)
      (SID_NAME = jydb1)
    )
  )

[grid@db01rac1 admin]$ lsnrctl reload
[oracle@db01rac1 ~]$ sqlplus sys/oracle@demorac1 as sysdba

使用duplicate命令创建standby数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi dup.sh 

rman target sys/oracle@demo auxiliary sys/oracle@demorac1 <<EOF
DUPLICATE TARGET DATABASE FOR STANDBY from active database NOFILENAMECHECK;
EOF

[oracle@db01rac1 ~]$ nohup sh dup.sh &
[oracle@db01rac1 ~]$ tail -200f nohup.out

5.3 确认已创建ORLs和SRLs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加RAC实例2的ORLs:
# SQL> recover managed standby database cancel;
alter system set standby_file_management=manual;

alter database add logfile thread 2 group 4 '+DATADG' size 209715200;
alter database add logfile thread 2 group 5 '+DATADG' size 209715200;
alter database add logfile thread 2 group 6 '+DATADG' size 209715200;

# recover managed standby database disconnect;
alter system set standby_file_management=auto;

SELECT MEMBER FROM V$LOGFILE;

# SRLs确认,可以选择删除重建符合要求的。

5.4 确认备库tnsnames.ora

之前已从主库同步过该配置文件。

5.5 启动MRP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RECOVER MANAGED STANDBY DATABASE DISCONNECT;

为了更直观的确保实时同步,可创建一个测试表(选做)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建测试表,验证ADG同步状态;
create table test (id number);
insert into test values(1);
commit;

select * from test;

5.6 创建spfile然后使用spfile启动数据库

指定RAC各个节点的参数文件init.ora,内容统一指向ASM磁盘组中的路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create spfile='+datadg' from pfile='$ORACLE_HOME/dbs/pfile_for_standby.txt';

[oracle@db01rac1 dbs]$ cat initjydb1.ora
spfile='+DATADG/DEMORAC/PARAMETERFILE/spfile.286.1127387689'

[oracle@db01rac2 dbs]$ cat initjydb2.ora
spfile='+DATADG/DEMORAC/PARAMETERFILE/spfile.286.1127387689'

在数据库启动时也可以在alert日志中确认使用了正确的参数文件。

6.检查同步状态

可以在备库根据下面的SQL查询相关的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
col name for a22
col value for a22
col SOURCE_DB_UNIQUE_NAME for a10
set lines 180
select * from v$dataguard_stats;

同步状态的结果类似如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SOURCE_DBID SOURCE_DB_ NAME		      VALUE		     UNIT			    TIME_COMPUTED		   DATUM_TIME			      CON_ID
----------- ---------- ---------------------- ---------------------- ------------------------------ ------------------------------ ------------------------------ ----------
	  0	       transport lag	      +00 00:00:00	     day(2) to second(0) interval   01/29/2023 17:48:12 	   01/29/2023 17:48:12			   0
	  0	       apply lag	      +00 00:00:00	     day(2) to second(0) interval   01/29/2023 17:48:12 	   01/29/2023 17:48:12			   0
	  0	       apply finish time      +00 00:00:00.000	     day(2) to second(3) interval   01/29/2023 17:48:12 						   0
	  0	       estimated startup time 11		     second			    01/29/2023 17:48:12 						   0

其他常用查询语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from v$archive_gap;
select process, client_process, sequence#, status from v$managed_standby;
select sequence#, first_time, next_time, applied from v$archived_log;
select archived_thread#, archived_seq#, applied_thread#, applied_seq# from v$archive_dest_status;
select thread#, max (sequence#) from v$log_history group by thread#;
select thread#, max (sequence#) from v$archived_log where APPLIED='YES' group by thread#;

7.添加资源

最后我们需要把Standby RAC的数据库和实例都添加到OCR中,使他们能够方便被CRS所管理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--oracle user:
crsctl stat res -t

srvctl add database -db demorac -dbname demo -oraclehome /u01/app/oracle/product/19.3.0/db_1 -dbtype RAC -spfile +DATADG/DEMORAC/PARAMETERFILE/spfile.286.1127387689 -role physical_standby -diskgroup DATADG,ARCHDG
srvctl add instance -db demorac -instance jydb1 -node db01rac1
srvctl add instance -db demorac -instance jydb2 -node db01rac2
srvctl start database -db demorac

添加完成后,crsctl stat res -t 显示的资源可以看到我们的备库信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ora.demorac.db
      1        ONLINE  ONLINE       db01rac1                 Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/19.3.0/db_1,STABL
                                                             E
      2        ONLINE  ONLINE       db01rac2                 Open,Readonly,HOME=/
                                                             u01/app/oracle/produ
                                                             ct/19.3.0/db_1,STABL
                                                             E

至此,单实例Primary快速搭建Standby RAC已完成。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Quick-Task 动态脚本支持框架之使用介绍篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/19/180719-Quick-Task-动态脚本支持框架之使用介绍篇/
一灰灰blog
2018/07/29
3920
Quick-Task 动态脚本支持框架之使用介绍篇
Quick-Task 动态脚本支持框架之结构设计篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/
一灰灰blog
2018/07/29
6360
Quick-Task 动态脚本支持框架之结构设计篇
180723-Quick-Task 动态脚本支持框架之结构设计篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/
一灰灰blog
2022/01/17
2680
180723-Quick-Task 动态脚本支持框架之结构设计篇
Quick-Task 动态脚本支持框架之任务动态加载
前面几篇博文分别介绍了整个项目的基本架构,使用说明,以及整体框架的设计与实现初稿,接下来则进入更细节的实现篇,将整个工程中核心实现捞出来,从为什么这么设计到最终的实现给予说明
一灰灰blog
2018/07/29
5000
Quick-Task 动态脚本支持框架之任务动态加载
Quick-Task 动态脚本支持框架之Groovy脚本加载执行
上一篇简答说了如何判断有任务动态添加、删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判定是否有任务的变更;
一灰灰blog
2018/08/07
1.2K0
Quick-Task 动态脚本支持框架之Groovy脚本加载执行
借助GitHub搭建属于自己的maven仓库
在Github上也写了不少的项目了,然后经常遇到的一个问题就是,很多自己写的项目,希望在另外一个项目中使用时,只能把这个项目下载下来,相当之不方便
一灰灰blog
2018/02/13
1.8K0
借助GitHub搭建属于自己的maven仓库
Quick-Media 中文二维码支持
Quick-Media 项目提供了一些列多媒体操作的开箱即用工具类,比如图片编辑合成,markdown/html/svg渲染,音频处理;当然还有本文重点说明的二维码生成解析
一灰灰blog
2020/06/30
5520
Quick-Media 中文二维码支持
Quick-Media 中文二维码支持
Quick-Media 项目提供了一些列多媒体操作的开箱即用工具类,比如图片编辑合成,markdown/html/svg渲染,音频处理;当然还有本文重点说明的二维码生成解析
一灰灰blog
2020/07/01
3860
Quick-Media 中文二维码支持
SpringBoot 系列教程 Mybatis+xml 整合篇
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
一灰灰blog
2020/02/11
9750
SpringBoot 系列教程 Mybatis+xml 整合篇
【SpringBoot Mybatis系列】MapperMapper接口与Sql绑定几种姿势
通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行对应的sql
一灰灰blog
2021/07/26
1.1K0
【SpringBoot Mybatis系列】MapperMapper接口与Sql绑定几种姿势
SpringBoot高级篇搜索Solr之 文档新增与修改使用姿势
大多涉及到数据的处理,无非CURD四种操作,对于搜索SOLR而言,基本操作也可以说就这么几种,在实际应用中,搜索条件的多样性才是重点,我们在进入复杂的搜索之前,先来看一下如何新增和修改文档
一灰灰blog
2019/07/02
1.2K0
SpringBoot高级篇搜索Solr之 文档新增与修改使用姿势
SpringBoot系列教程JPA之基础环境搭建
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。JPA作为标准,实际上并没有说局限于某个固定的数据源,事实上mysql,mongo, solr都是ok的。接下来我们将介绍下springboot结合jpa 来实现mysql的curd以及更加复杂一点的sql支持
一灰灰blog
2019/07/02
5930
SpringBoot系列教程JPA之基础环境搭建
SpringBoot实战基于异常日志的邮件报警
相信所有奋斗在一线的小伙伴,会很关心自己的系统的运行情况,一般来说,基础设施齐全一点的公司都会有完善的报警方案,那么如果我们是一个小公司呢,不能因为基础设施没有,就失去对象的感知能力吧;如果我们的系统大量异常却不能实时的触达给我们,那么也就只会有一个结果--杀个程序猿祭天
一灰灰blog
2021/08/12
6630
SpringBoot实战基于异常日志的邮件报警
徒手撸一个扫码登录示例工程
不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求、有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤
一灰灰blog
2020/04/24
6191
徒手撸一个扫码登录示例工程
SpringBoot系列教程web篇之Thymeleaf环境搭建
上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目
一灰灰blog
2019/08/23
5410
SpringBoot系列教程web篇之Thymeleaf环境搭建
Spring MVC之基于xml配置的web应用构建
直接用SpringBoot构建web应用可以说非常非常简单了,在使用SpringBoot构建后端服务之前,一直用的是Spring + SpringMVC基于xml的配置方式来玩的,所以在正式进入SpringBoot Web篇之前,有必要看一下不用SpringBoot应该怎么玩的,也因此方便凸显SpringBoot的优越性
一灰灰blog
2019/03/17
1.1K0
Spring MVC之基于xml配置的web应用构建
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
[【SpringBoot 基础系列】@Value 之字面量及 SpEL 知识点介绍篇](http://mp.weixin.qq.com/s?__biz=MzU3MTAzNTMzMQ==&mid=224
一灰灰blog
2021/06/21
3721
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
【SpringBoot + Mybatis系列】Mapper接口注册的几种方式
SpringBoot项目中借助Mybatis来操作数据库,对大部分java技术栈的小伙伴来说,并不会陌生;我们知道,使用mybatis,一般会有下面几个
一灰灰blog
2021/07/26
1K0
【SpringBoot + Mybatis系列】Mapper接口注册的几种方式
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
承接上一篇博文【SpringBoot 基础系列】@Value 中哪些你不知道的知识点 中提及到但没有细说的知识点,这一篇博文将来看一下@Value除了绑定配置文件中的属性配置之外,另外支持的两种姿势
一灰灰blog
2021/06/16
6951
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
SpringBoot系列教程web篇之重定向
前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -> 重定向;
一灰灰blog
2019/10/12
3.4K0
SpringBoot系列教程web篇之重定向
推荐阅读
相关推荐
Quick-Task 动态脚本支持框架之使用介绍篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验