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数据库容器中后打开数据库时报错!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)