web应用和数据库都是运行在web容器上面的吗

web应用和数据库都是运行在web容器上面的吗,第1张

web应用需要跟db做数据交互,部署的应用程序必须依赖于web容器。

以tomcat为例来说明:

1 打开Eclipse——打开菜单栏window选择preference(首选项)——左侧选择Tomcat,如下图示:

  2 可以看到上图中高亮画出的Context declaration mode(Context 声明模式)中选择以Context files增加自定义部署文件的形式部署web应用——然后Contexts directory中指定上述文件的上级目录(即%Tomcat_Home%\conf\Catalina\localhost )——点击Apply或OK。

3 完上述步骤,再选中Web项目右键点击properties(属性)——选择右侧的Tomcat ,如下图所示:

4 勾上"Is a Tomcat project"前的checkbox,将项目关联至Tomcat。

在Context name中填入XXX,即Web应用自定义部署文件名和Context path名。

在Subdirectory to set as web application root (optional)中填入要部署的Web应用的实际路径(即WEB-INF上级目录)。

注意:Eclipse会自动地将workdir设置在Workspace\WebApp\work下。

如此便自动创建了%Tomcat_Home%\conf\Catalina\localhost\XXXxml 文件。启动Tomcat 即可自动部署Web应用。

oracle在导入数据时报1659的错误的原因主要是数据库表空间剩余空间不足引起的。

分析原因

1、表空间剩余空间不足。

使用下面语句,查看表空间剩余空间

select Upper(ftablespace_name) "表空间名",

dtot_grootte_mb "表空间大小(M)",

dtot_grootte_mb - ftotal_bytes "已使用空间(M)",

to_char(round((dtot_grootte_mb - ftotal_bytes) /

dtot_grootte_mb 100, 2),'99099') || '%' "使用比",

ftotal_bytes "空闲空间(M)",

fmax_bytes "最大块(M)"

from (select tablespace_name,

round(sum(bytes) / (1024 1024), 2) total_bytes,

round(max(bytes) / (1024 1024), 2) max_bytes

from sysdba_free_space

group by tablespace_name) f,

(select ddtablespace_name,

round(sum(ddbytes) / (1024 1024), 2) tot_grootte_mb

from sysdba_data_files dd

group by ddtablespace_name) d

where dtablespace_name = ftablespace_name

order by ftablespace_name;

表空间剩余空间不足时,可以根据原数据库表空间大小增加表空间。

alter tablespace 表空间名 add datafile '数据文件名' size 数据文件大小;

2、剩余表空间还很多。

使用下面语句查看原数据库表表定义,找到initial_extent值大的表,将这些表的

创建语句导出后修改initial_extent值,在目标数据库中创建后再导入数据,导入时

增加参数ignore=y。

select table_name, initial_extent

from user_tables

where initial_extent is not null

order by initial_extent desc

如果找不到原数据库,可以使用

imp userid/userid@service_name file=dmp文件名 indexfile=index文件名 rows=n full=Y

命令将dmp文件中创建表的语句导入到indexfile文件中,查看indexfile如下:

REM CREATE TABLE "TEST""DM_KJKM_COPY" ("KJZDMB_DM" VARCHAR2(100)

REM ENABLE, "KMID" NUMBER(20, 0), "KMBM" VARCHAR2(100), "KMMC"

REM VARCHAR2(500), "KMQC" VARCHAR2(1000), "KMLB_DM" VARCHAR2(100),

REM

使用文本编辑工具,查找INITIAL将过大的初始值改为65536后,将REM去除后,在数据库中创建后再使用exp导入数据,导入时增加参数ignore=y。

1 首先是jdbcproperties属性文件的编写,便于数据库移植:

datasourcedriverClassName=oraclejdbcdriverOracleDriver

datasourceurl=jdbc:oracle:thin:@106111:1521:student

datasourceusername=zs

datasourcepassword=zs

datasourcedefaultAutoCommit=true 

hibernatedialect=orghibernatedialectOracle9Dialect

 

#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3

c3p0acquireIncrement=5

#初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 

c3p0initialPoolSize=10

#每60秒检查所有连接池中的空闲连接。Default: 0 

c3p0idleConnectionTestPeriod=600

#-连接池中保留的最小连接数。

c3p0minPoolSize=5

#连接池中保留的最大连接数。Default: 15 

c3p0maxPoolSize=50

#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements

#属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。

#如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0

c3p0maxStatements=100

#c3p0是异步 *** 作的,缓慢的JDBC *** 作通过帮助进程完成。扩展这些 *** 作可以有效的提升性能

#通过多线程实现多个 *** 作同时被执行。Default: 3

c3p0numHelperThreads=10

#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 

c3p0maxIdleTime=600

 

#hibernatedialect=orghibernatedialectSQLServerDialect

hibernatejdbcbatch_size=25

hibernatejdbcfetch_size=50

hibernateshow_sql=true

hibernateconnectionrelease_mode=after_transaction

  

2 其次是spring配置文件的数据源配置:

<bean id="propertyConfigurer" class="orgspringframeworkbeansfactoryconfigPropertyPlaceholderConfigurer">

 <property name="location">

  <value>/WEB-INF/classes/conf/jdbc/jdbcproperties</value>

 </property>

</bean>

<bean id="dataSource" class="commchangev2c3p0ComboPooledDataSource" destroy-method="close" dependency-check="none">

 <property name="driverClass">

  <value>${datasourcedriverClassName}</value>

 </property>

 <property name="jdbcUrl">

  <value>${datasourceurl}</value>

 </property>

 <property name="user">

  <value>${datasourceusername}</value>

 </property>

 <property name="password">

  <value>${datasourcepassword}</value>

 </property>

 <!-- 当连接池中连接耗尽的时候c3p0一次同时获取的连接数 -->

 <property name="acquireIncrement">

  <value>${c3p0acquireIncrement}</value>

 </property>

 <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->   

 <property name="initialPoolSize">

  <value>${c3p0initialPoolSize}</value>

 </property>

 <!-- 最小连接数 -->

 <property name="minPoolSize">

  <value>${c3p0minPoolSize}</value>

 </property>

 <!-- 最大连接数 -->

 <property name="maxPoolSize">

  <value>${c3p0minPoolSize}</value>

 </property>

 <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->    

 <property name="maxIdleTime">

  <value>${c3p0maxPoolSize}</value>

 </property>

 <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->

 <property name="idleConnectionTestPeriod">

  <value>${c3p0idleConnectionTestPeriod}</value>

 </property>

 <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。

 所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->

 <property name="maxStatements">

  <value>${c3p0maxStatements}</value>

 </property>

 <!--c3p0是异步 *** 作的,缓慢的JDBC *** 作通过帮助进程完成。扩展这些 *** 作可以有效的提升性能通过多线程实现多个 *** 作同时被执行。Default: 3-->    

 <property name="numHelperThreads">

你好,1、首先电脑打开SQL客户端,找到实例,右键实例出现菜单栏,点击属性进入即可。

2、然后进入属性的界面,可以看到有很多设置的选项,找到数据库设置,点击一下进入。

3、点击数据库设置之后,进入该界面,可以看到数据库默认位置的选项,即可看到sql数据库的路径

数据库的好处

1可以持久化数据到本地

2、结构化查询

二、数据库的常见概念

1、DB:数据库,存储数据的容器

2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB

3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言。

三、数据库存储数据的特点

1、数据库存放到表中,然后表再放到库中

2、一个库可以有多张表,每张表具有唯一的表名来标识自己

3、表中有一个或多个列,又被称为“字段”,相当于java中“属性”

4表中的每一行数据,相当于java中“对象优点:数据库系统是用来管理数据的,建立的数理逻辑和集合 *** 作基础上的。

具有高效、可靠、完整、自同步等特性,是业务系统进行数据控制的最佳选择。

数据库系统一般提供高效的数据控制和数据检索功能,采用SQL语言来进行数据 *** 作。

目前市面上流行的数据库系统很多:较小型的数据库系统有:mysql,MSSQL_SERVER等等,适用于企业级的大型数据库有:ORACEL,DB2(IBM),INFORMIX(IBM)等等

缺点:安全性不够,加了用户级密码容易破解

C/S 结构下对服务器要求很高,否则容易造成 MDB 损坏并发数255。

但是对高强度 *** 作适应性差,如果服务器不够好,网络不够好,编程的方法不够好,6-7个人同时访问就能导致 MDB 损坏或者并死不能将 VBA 代码开发的软件系统直接编译成 EXE 可执行文件仅供参考具

一个项目中使用多个数据源的需求,我们在日常工作中时常会遇到。

以商城系统为例,有一个 MySQL 的数据库负责存储交易数据。公司还有一套 ERP 企业信息化管理系统,要求订单信息同步录入 ERP 数据库,便于公司统一管理,而该 ERP 系统采用的数据库为 SQL Server 。

此时,就可以在 Spring Boot 项目中配置多个数据源。另外,使用多数据源后,需要采用分布式事务来保持数据的完整性。

本小节我们使用 Spring Boot 开发一个商城系统的订单生成功能,订单信息同时进入 MySQL 与 SQL Server 数据库。

首先创建 MySQL 数据库 shop ,并新建订单表 order ,表结构如下:

order 表结构

然后创建 SQL Server 数据库 erpshop ,并新建订单表 erp_order ,表结构如下。注意 id 是自增长的唯一标识,out_id 是对应订单在 MySQL 数据库中的唯一标识,以便在两个库中比对订单。

erp_order 结构

接下来,我们开始实现 Spring Boot 后端项目,数据持久层采用 MyBatis 框架,同时访问两个数据源。

Spring Boot 版本选择 225 ,Group 为 comimooc , Artifact 为 spring-boot-multidb,生成项目后导入 Eclipse 开发环境。

我们引入热部署依赖、 Web 依赖、数据库访问相关依赖及测试相关依赖,具体如下:

实例:

由于我们要同时访问两个数据库,所以需要在配置文件中添加两个数据源的配置信息。注意配置多数据源时, url 配置需要使用 springdatasourcedb1jdbc-url=xxx 的形式。

实例:

多个数据源的情况下, 我们需要通过配置类,将数据源注册为组件放入 Spring 容器中。

实例:

通过这个配置类, Spring 容器中就有两个数据源组件,这两个组件分别采用 springdatasourcedb1 和 springdatasourcedb2 开头的配置信息。所以通过这两个组件,就能分别 *** 作 MySQL 数据源 1 和 SQL Sever 数据源 2 。

多数据源情况下, MyBatis 中的关键组件 SqlSessionFactory 和 SqlSessionTemplate 也需要单独配置,我们需要为两个数据源分别配置一套组件。

实例:

通过上面的配置类, comimoocspringbootmultidbmapper1 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate1 组件实现具体数据库 *** 作,而 sqlSessionTemplate1 *** 作的数据源已经通过配置类设置为 db1 。同时, DAO 数据访问接口对应的映射文件已经指定到 classpath:mapper1/ 目录去寻找。这样数据源 – DAO 数据访问接口 – 映射文件三者的对应关系就建立起来了。

数据源 2 的配置方法是一样的, comimoocspringbootmultidbmapper2 包中的 DAO 数据访问接口会自动调用 sqlSessionTemplate2 组件,其 *** 作的数据源即为 db2 ,其对应的映射文件指定到 classpath:mapper2/ 目录去寻找。

实例:

数据访问接口的位置已经在配置类指定,首先在 comimoocspringbootmultidbmapper1 创建 OrderDao , *** 作的是数据源 1 中的 order 表。

实例:

然后在 comimoocspringbootmultidbmapper2 创建 ErpOrderDao , *** 作的是数据源 2 中的 erporder 表。

实例:

这两个接口中使用的数据对象比较简单,代码如下:

实例:

分别针对 OrderDao 、 ErpOrderDao 编写对应的映射文件,然后按照配置类指定的位置,两个文件分别放到 resources/mapper1 和 resources/mapper2 目录下。

实例:

实例:

数据 *** 作接口与对应的映射文件均已编写完毕,现在可以通过测试类进行多数据源测试了,我们在测试类中同时向两个库插入记录。

实例:

运行测试方法后,两个数据库表中均新增数据成功,这样我们就成功的使用 Spring Boot 同时 *** 作了两个数据源。

采用多数据源之后,事务的实现方式也随之发生变化。当某个数据源 *** 作出现异常时,该数据源和其他数据源的事务都需要回滚。这种涉及多个数据源的事务,称为分布式事务,接来下我们就来具体实现一下。

在 pomxml 引入 Atomikos 事务管理器相关的依赖项, Atomikos 是一个开源的事务管理器,支持分布式事务。

实例:

需要将默认的数据源更换为支持分布式事务的数据源, MySQL 对应的数据源为 MysqlXADataSource , SQL Server 对应的数据源为 SQLServerXADataSource 。

实例:

继续修改 DataSourceConfig 类,在其中配置分布式事务管理器组件。当项目中使用事务时,会通过配置的分布式事务管理器管理分布式事务 *** 作。

实例:

在测试方法上添加 @Transactional 开启事务,然后在两个数据源 *** 作中间模拟抛出异常。

实例:

此时运行测试类,可以发现数据源 1 的事务已回滚,验证成功!

在开发 Spring Boot 项目时,如果默认配置满足不了我们的需求,可以通过手工配置组件实现我们需要的功能。这些组件可能是各个公司提供的,我们根据相应文档,为其配置各个属性即可。

以上就是关于web应用和数据库都是运行在web容器上面的吗全部的内容,包括:web应用和数据库都是运行在web容器上面的吗、无法连接Oracle数据库使用Docker容器后问题,怎么解决、Oracle.12.1.0.1.0中的一个pdb数据库拔出后插入到Oracle.12.1.0.2.0数据库容器中后打开数据库时报错!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9813245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存