spring中配置MySql数据源,怎样配置数据库信息

spring中配置MySql数据源,怎样配置数据库信息,第1张

一) 其实这个功能在spring2x时代就提供了。一直没用过,今天在spring-mvc32x的环境下试验了一次。还算简单易用。

二) 依赖。

spring依赖POI或jExcel来实现对excel输出的支持,前者是apache出品,貌似名气更大,本例使用第一个。

<dependency>

<groupId>orgapachepoi</groupId>

<artifactId>poi</artifactId>

<version>37</version>

</dependency>

三) spring提供了一个AbstractExcelView作为自己实现的视图的父类。实例代码如下。

package yingcarview;

import javatextDateFormat;

import javatextSimpleDateFormat;

import javautilList;

import javautilMap;

import javaxservlet>

import javaxservlet>

import orgapachepoihssfusermodelHSSFDataFormat;

import orgapachepoihssfusermodelHSSFSheet;

import orgapachepoihssfusermodelHSSFWorkbook;

import orgapachepoissusermodelCell;

import orgapachepoissusermodelCellStyle;

import orgapachepoissusermodelIndexedColors;

import orgjodatimeDateTime;

import orgslf4jLogger;

import orgslf4jLoggerFactory;

import orgspringframeworkwebservletviewdocumentAbstractExcelView;

import yingcarbindingDateRange;

import yingcardomainRefuelingRecord;

public class RefuelingRecordExcelView extends AbstractExcelView {

private static final Logger LOGGER = LoggerFactorygetLogger(RefuelingRecordExcelViewclass);

private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");

@Override

@SuppressWarnings({"unchecked"})

protected void buildExcelDocument(

Map<String, Object> model,        // MVC中的M就在这里了

HSSFWorkbook workbook,

>

>

{

("yyyy/MM/dd"));

LOGGERdebug("end: {}", new DateTime(drgetEnd())toString("yyyy/MM/dd"));

}

}

HSSFSheet sheet = workbookcreateSheet(DATE_FORMATformat(drgetStart()) + "-" + DATE_FORMATformat(drgetEnd()));

setColumnsWidth(sheet);

fillTableHeader(workbook, sheet);

fillTableBody(workbook, sheet, rrl);

}

private void setColumnsWidth(HSSFSheet sheet) {

final int[] warr = new int[] {

500,  // <空>

4500, // 日期

4500, // 车辆

4500, // 燃油种类

4500, // 燃油单价

4500, // 加油方式

4500, // 加油量

3000, // 花费

12000  // 备注

};

for (int i = 0; i < warrlength; i ++) {

sheetsetColumnWidth(i, warr[i]);

}

}

// 填充表格头

private void fillTableHeader(HSSFWorkbook workbook, HSSFSheet sheet) {

final String[] contents = new String[] {

"日期",

"车辆",

"燃油种类",

"燃油单价(元/升)",

"加油方式",

"加油量(升)",

"花费(元)",

"备注"

};

int r = 1;

int c = 1;

CellStyle style = workbookcreateCellStyle();

stylesetFillForegroundColor(IndexedColorsYELLOWgetIndex());      // 填充**

stylesetFillPattern(CellStyleSOLID_FOREGROUND);           // 填充方式

// 设置border

stylesetBorderLeft(CellStyleBORDER_THIN);

stylesetBorderRight(CellStyleBORDER_THIN);

stylesetBorderTop(CellStyleBORDER_THIN);

stylesetBorderBottom(CellStyleBORDER_THIN);

for (int i = 0; i < contentslength; i ++) {

Cell cell = getCell(sheet, r, c + i);

cellsetCellValue(contents[i]);

cellsetCellStyle(style);

}

}

private void fillTableBody(HSSFWorkbook workbook, HSSFSheet sheet, List<RefuelingRecord> records) {

// 通用style

CellStyle style = workbookcreateCellStyle();

stylesetFillForegroundColor(IndexedColorsWHITEgetIndex());       // 填充白色

stylesetFillPattern(CellStyleSOLID_FOREGROUND);                   // 填充方式

stylesetBorderLeft(CellStyleBORDER_THIN);

stylesetBorderRight(CellStyleBORDER_THIN);

stylesetBorderTop(CellStyleBORDER_THIN);

stylesetBorderBottom(CellStyleBORDER_THIN);

// 日期style

CellStyle dateStyle = workbookcreateCellStyle();

dateStylesetFillForegroundColor(IndexedColorsWHITEgetIndex());       // 填充白色

dateStylesetFillPattern(CellStyleSOLID_FOREGROUND);                   // 填充方式

dateStylesetBorderLeft(CellStyleBORDER_THIN);

dateStylesetBorderRight(CellStyleBORDER_THIN);

dateStylesetBorderTop(CellStyleBORDER_THIN);

dateStylesetBorderBottom(CellStyleBORDER_THIN);

dateStylesetDataFormat(HSSFDataFormatgetBuiltinFormat("m/d/yy"));

int r = 2;

int c = 1;

Cell cell = null;

for (int i = 0; i < recordssize(); i ++) {

RefuelingRecord rr = recordsget(i);

// 日期

cell = getCell(sheet, r, c + 0);

if (rrgetDate() != null)

cellsetCellValue(rrgetDate());

cellsetCellStyle(dateStyle);

// 车辆

cell = getCell(sheet, r, c + 1);

if (rrgetVehicle()getNickname() != null)

cellsetCellValue(rrgetVehicle()getNickname());

cellsetCellStyle(style);

// 燃油种类

cell = getCell(sheet, r, c + 2);

if (rrgetGasType() != null) {

String s = null;

switch (rrgetGasType()) {

case _0: s  = "0号柴油"; break;

case _93: s = "93号汽油"; break;

case _97: s = "97号汽油"; break;

case _98: s = "98号汽油"; break;

}

cellsetCellValue(s);

}

cellsetCellStyle(style);

// 单价

cell = getCell(sheet, r, c + 3);

if (rrgetPriceOfGas() != null)

cellsetCellValue(rrgetPriceOfGas());

cellsetCellStyle(style);

// 加油方式

cell = getCell(sheet, r, c + 4);

if (rrgetRefuelingType() != null) {

String s = null;

switch (rrgetRefuelingType()) {

case FIXED_CUBAGE:

s = "固定容积"; break;

case FIXED_MONEY:

s = "固定金额"; break;

case FULL:

s = "加满"; break;

}

cellsetCellValue(s);

}

cellsetCellStyle(style);

// 加油量

cell = getCell(sheet, r, c + 5);

if (rrgetCubageOfGas() != null)

cellsetCellValue(rrgetCubageOfGas());

cellsetCellStyle(style);

// 花费

cell = getCell(sheet, r, c + 6);

if (rrgetSumOfMoney() != null)

cellsetCellValue(rrgetSumOfMoney());

cellsetCellStyle(style);

// 备注

cell = getCell(sheet, r, c + 7);

if (rrgetComment() != null)

cellsetCellValue(rrgetComment());

cellsetCellStyle(style);

r ++;

}

}

}

cellsetCellStyle(style);

// 燃油种类

cell = getCell(sheet, r, c + 2);

if (rrgetGasType() != null) {

String s = null;

switch (rrgetGasType()) {

case _0: s  = "0号柴油"; break;

case _93: s = "93号汽油"; break;

case _97: s = "97号汽油"; break;

case _98: s = "98号汽油"; break;

}

cellsetCellValue(s);

}

cellsetCellStyle(style);

// 单价

cell = getCell(sheet, r, c + 3);

if (rrgetPriceOfGas() != null)

cellsetCellValue(rrgetPriceOfGas());

cellsetCellStyle(style);

// 加油方式

cell = getCell(sheet, r, c + 4);

if (rrgetRefuelingType() != null) {

String s = null;

switch (rrgetRefuelingType()) {

case FIXED_CUBAGE:

s = "固定容积"; break;

case FIXED_MONEY:

s = "固定金额"; break;

case FULL:

s = "加满"; break;

}

cellsetCellValue(s);

}

cellsetCellStyle(style);

// 加油量

cell = getCell(sheet, r, c + 5);

if (rrgetCubageOfGas() != null)

cellsetCellValue(rrgetCubageOfGas());

cellsetCellStyle(style);

// 花费

cell = getCell(sheet, r, c + 6);

if (rrgetSumOfMoney() != null)

cellsetCellValue(rrgetSumOfMoney());

cellsetCellStyle(style);

// 备注

cell = getCell(sheet, r, c + 7);

if (rrgetComment() != null)

cellsetCellValue(rrgetComment());

cellsetCellStyle(style);

r ++;

}

}

}

四) Controller中返回逻辑视图名 (代码片段)

Java代码

@RequiresUser       // 安全框架用元注释

@RequiresRoles({"ROLE_USER"})

@RequestMapping(value = "/list/excel", method = RequestMethodGET)

public String listByExcel(

@DateRangeFormat(pattern = "yyyy-MM-dd") @RequestParam("dateRange") DateRange dateRange,

ModelMap modelMap

)

{

}

// 放入model

modelMapput("dateRange", dateRange);

modelMapput("refuelingRecordList", gasServicefindRefuelingRecordByDateRange(currentUserId, dateRange));

return "refueling-record-list"; // 最终返回逻辑视图名

}

五) 为spring-mvc配置多个视图解析器。

<bean class="orgspringframeworkwebservletviewXmlViewResolver">

<property name="order" value="1" /> <!-- order很重要 -->

<property name="location" value="classpath:/META-INF/viewsxml" />

</bean>

<bean class="orgspringframeworkwebservletviewInternalResourceViewResolver">

<property name="order" value="9999" />

<property name="viewClass" value="orgspringframeworkwebservletviewJstlView" />

<property name="prefix" value="/WEB-INF/jsp/"/>

<property name="suffix" value="jsp"/>

六) 效果图

quartz定时任务配置:

class="orgschelingquartz"

其中:

配置对应的定时任务,可配置多个,名称要唯一,对应的是第二步中配置的

配置,由于要实现动态读取定时任务周期时间,所以我们要写一个类实现,类的内容如下:

publicclassextendsimplements{

privatestaticfinallong=1L;

privatesysParamServiceImpl;

privateStringkey;

publicvoidsetKey(Stringkey)

{

thiskey=key;

}

publicvoidsetSysParamServiceImpl(SysParamServiceImplsysParamServiceImpl)

{

thissysParamServiceImpl=sysParamServiceImpl;

setCronExpression(getCronExpressionFromDB());

}

privateStringgetCronExpressionFromDB()

{

if(StringUtilsisEmpty(key))

return"000/1";

SysParamsysParam=newSysParam();

try

{

sysParam=sysParamServiceImplgetNameByKey(key);

}

catch(Exceptione)

{

eprintStackTrace();

}

if(sysParam!=null&&!StringUtilsisEmpty(sysParamgetParamValue()))

returnsysParamgetParamValue();

return"000/1";

}

}

简单说明一下:key是用来查询数据库配置的CronExpression表达式的查询条件,SysParamServiceImpl是实现查询的类,这几个参数都要从spring配置的CronTriggerFactoryBean参数获取,注意,配置的时候,key值的配置要在SysParamServiceImpl的配置之前,否则报空指针

spring配置CronTriggerFactoryBean:

实现了CronTriggerFactoryBean之后,开始配置CronTriggerFactoryBean,现在配置的是InitCronTriggerFactoryBean:

id对应quartz定时任务配置的,参数有三个,第二个和第三个是InitCronTriggerFactoryBean设置内容需要的,第一个则是定时任务执行业务逻辑的类

ps:,这个要配置对应的bean,我的是

配置对应的定时任务执行业务方法的类:

class="orgspringframeworkschelingquartzJobDetailFactoryBean"

简单说明一下:配置的是你需要定时执行的类,下面配置的是定时执行类中需要用到的其他类,这是由于项目启动执行定时任务不能在定时任务类中实例化这些类,要配置才行。

对应的定时任务执行类:

publicclassInquiryQuartzextendsQuartzJobBean{

@Autowired

privateInquiryServiceImplinquiryServiceImpl;

@Override

protectedvoidexecuteInternal(JobExecutionContextarg0)throwsJobExecutionException

{

//实例化接口

inquiryServiceImpl=(InquiryServiceImpl)arg0getJobDetail()getJobDataMap()get("inquiryServiceImpl");

//执行业务方法

quartzStart();

}

publicvoidquartzStart(){

//业务方法

}

}

说明一下:必须要实现QuartzJobBean接口

至此,就可以完成可配置CronExpression表达式的定时任务了!1

以上就是关于spring中配置MySql数据源,怎样配置数据库信息全部的内容,包括:spring中配置MySql数据源,怎样配置数据库信息、Spring Boot教程第5篇:beatsql、springboot连接阿里云数据库读取不到数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9690787.html

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

发表评论

登录后才能评论

评论列表(0条)

保存