springboot 接口-boot如何去调另一个系统的接口

SpringBoot下如何配置实现跨域请求? - 喝酒不骑马的博客 - CSDN博客
SpringBoot下如何配置实现跨域请求?
SpringBoot
最近在做的项目中,我们采用前后端分离式开发。后台RequestController接口写好后,通过另一台电脑的前端界面用ajax访问我电脑上的后台服务接口时,http请求会返回500的错误。经过查阅资料得知,这个问题是由“跨域请求”所引起的。那么这个“跨域”到底是什么呢?
一、什么是跨域请求?
跨域请求,就是说浏览器在执行脚本文件的ajax请求时,脚本文件所在的服务地址和请求的服务地址不一样。说白了就是ip、网络协议、端口都一样的时候,就是同一个域,否则就是跨域。这是由于Netscape提出一个著名的安全策略——同源策略造成的,这是浏览器对JavaScript施加的安全限制。是防止外网的脚本恶意攻击服务器的一种措施。
二、SpringBoot工程如何解决跨域问题?
那么如何在SpringBoot中处理跨域问题呢?方法有很多,这里着重讲一种——利用@Configuration配置跨域。
代码实现如下:
* Created by myz on .
* 设置跨域请求
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsC
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
这里最重要代码是
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
source.registerCorsConfiguration("/**", buildConfig());
“*”代表全部。”**”代表适配所有接口。
其中addAllowedOrigin(String origin)方法是追加访问源地址。如果不使用”*”(即允许全部访问源),则可以配置多条访问源来做控制。
corsConfiguration.addAllowedOrigin("/")
corsConfiguration.addAllowedOrigin("/")
查看CorsConfiguration类的官方文档()
我们可以找到官方对setAllowedOrigins(List allowedOrigins)和addAllowedOrigin(String origin)方法的介绍。
addAllowedOrigin是追加访问源地址,而setAllowedOrigins是可以直接设置多条访问源。
但是有一点请注意,我查看setAllowedOrigins方法源码时发现,源码如下
public void setAllowedOrigins(List&String& allowedOrigins) {
this.allowedOrigins = allowedOrigins != null?new ArrayList(allowedOrigins):null;
根据源码可以得知,setAllowedOrigins会覆盖this.allowedOrigins。所以在配置访问源地址时,
addAllowedOrigin方法要写在setAllowedOrigins后面,当然了,一般情况下这两个方法也不会混着用。
addAllowedHeader、addAllowedMethod、registerCorsConfiguration方法和addAllowedOrigin的源码差不太多,这里就不一一介绍了。感兴趣的朋友可以自行查阅。
三、其他实现跨域请求方法
当然。除了用这种初始化配置的方法设置跨域问题,在官方的文档中也介绍了其他实现跨域请求的方法()。
例如在接口上使用@CrossOrgin注解:
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
对于上述代码,官方给出如下一段说明:
You can add to your @RequestMapping annotated handler method a @CrossOrigin annotation in order to enable CORS on it (by default @CrossOrigin allows all origins and the HTTP methods specified in the @RequestMapping annotation).
意思就是可以直接在@RequestMapping接口上使用@CrossOrigin实现跨域。@CrossOrigin默认允许所有访问源和访问方法。
还有一种方法是直接对整个Controller进行跨域设置:
@CrossOrigin(origins = "", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
这里,可以对@CrossOrigin设置特定的访问源,而不是使用默认配置。
以上就是对SpringBoot下配实现跨域请求的介绍。
参考文档:
我的热门文章前面我们已经整合spring-ws实现了web service的服务端:
接下来就是实现客户端进行调用了。
客户端,同样的需要先添加依赖:
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-ws&/artifactId&
&/dependency&
&dependency&
&groupId&wsdl4j&/groupId&
&artifactId&wsdl4j&/artifactId&
&/dependency&
获取wsdl文件
服务端由一个xsd文件开始,客户端则是由一个wsdl文件开始。
获取wsdl文件也十分简单,用浏览器访问web service地址,然后另存为即可。当然也可以直接用url地址来生成代码,只不过我习惯本地另存为后再生成。
完整的wsdl文件内容如下:
&wsdl:definitions
xmlns:wsdl=&http://schemas.xmlsoap.org/wsdl/&
xmlns:sch=&/ws&
xmlns:soap=&http://schemas.xmlsoap.org/wsdl/soap/&
xmlns:tns=&/ws& targetNamespace=&/ws&&
&wsdl:types&
&xs:schema
xmlns:xs=&http://www.w3.org/2001/XMLSchema& elementFormDefault=&qualified& targetNamespace=&/ws&&
&xs:element name=&getCountryRequest&&
&xs:complexType&
&xs:sequence&
&xs:element name=&name& type=&xs:string&/&
&/xs:sequence&
&/xs:complexType&
&/xs:element&
&xs:element name=&getCountryResponse&&
&xs:complexType&
&xs:sequence&
&xs:element name=&country& type=&tns:country&/&
&/xs:sequence&
&/xs:complexType&
&/xs:element&
&xs:complexType name=&country&&
&xs:sequence&
&xs:element name=&name& type=&xs:string&/&
&xs:element name=&population& type=&xs:int&/&
&xs:element name=&capital& type=&xs:string&/&
&xs:element name=&currency& type=&tns:currency&/&
&/xs:sequence&
&/xs:complexType&
&xs:simpleType name=&currency&&
&xs:restriction base=&xs:string&&
&xs:enumeration value=&GBP&/&
&xs:enumeration value=&EUR&/&
&xs:enumeration value=&PLN&/&
&/xs:restriction&
&/xs:simpleType&
&/xs:schema&
&/wsdl:types&
&wsdl:message name=&getCountryResponse&&
&wsdl:part element=&tns:getCountryResponse& name=&getCountryResponse&&&/wsdl:part&
&/wsdl:message&
&wsdl:message name=&getCountryRequest&&
&wsdl:part element=&tns:getCountryRequest& name=&getCountryRequest&&&/wsdl:part&
&/wsdl:message&
&wsdl:portType name=&CountriesPort&&
&wsdl:operation name=&getCountry&&
&wsdl:input message=&tns:getCountryRequest& name=&getCountryRequest&&&/wsdl:input&
&wsdl:output message=&tns:getCountryResponse& name=&getCountryResponse&&&/wsdl:output&
&/wsdl:operation&
&/wsdl:portType&
&wsdl:binding name=&CountriesPortSoap11& type=&tns:CountriesPort&&
&soap:binding style=&document& transport=&http://schemas.xmlsoap.org/soap/http&/&
&wsdl:operation name=&getCountry&&
&soap:operation soapAction=&&/&
&wsdl:input name=&getCountryRequest&&
&soap:body use=&literal&/&
&/wsdl:input&
&wsdl:output name=&getCountryResponse&&
&soap:body use=&literal&/&
&/wsdl:output&
&/wsdl:operation&
&/wsdl:binding&
&wsdl:service name=&CountriesPortService&&
&wsdl:port binding=&tns:CountriesPortSoap11& name=&CountriesPortSoap11&&
&soap:address/&
&/wsdl:port&
&/wsdl:service&
&/wsdl:definitions&
添加maven的jaxb2插件生成代码
跟服务端根据xsd来生成代码类似,客户端同样可以根据wsdl来生成代码。maven插件依赖:
&groupId&org.jvnet.jaxb2.maven2&/groupId&
&artifactId&maven-jaxb2-plugin&/artifactId&
&version&0.12.3&/version&
&executions&
&execution&
&goal&generate&/goal&
&/execution&
&/executions&
&configuration&
&schemaLanguage&WSDL&/schemaLanguage&
&generatePackage&com.dexcoder.ws&/generatePackage&
&generateDirectory&${basedir}/src/main/java&/generateDirectory&
&!-- Defaults to schemaDirectory. --&
&directory&${basedir}/src/main/resources/schemas&/directory&
&!-- Defaults to schemaIncludes. --&
&includes&
&include&*.wsdl&/include&
&/includes&
&!-- Defaults to schemaIncludes --&
&!--&excludes&--&
&!--&exclude&*.xs&/exclude&--&
&!--&/excludes&--&
&/fileset&
&!--&url&http://localhost:8080/ws/countries.wsdl&/url&--&
&/schemas&
&/configuration&
同样mvn install之后将生成客户端代码。这里生成的代码跟我们前面发布的服务端代码应该是一样的,当然包名可能不同这个由你指定。
在生成代码的同时会生成META-INF文件夹,这个可以移到resources目录下或者直接删除都没有关系。生成后的项目结构图:
编写ws客户端
生成了代码之后,编写客户端变的很容易,具体代码如下:
public class WsClient extends WebServiceGatewaySupport {
public GetCountryResponse getCountry(String name) {
GetCountryRequest request = new GetCountryRequest();
request.setName(name);
GetCountryResponse response = (GetCountryResponse) getWebServiceTemplate().marshalSendAndReceive(
&http://localhost:8080/ws/countries.wsdl&, request);
配置ws客户端
编写完一切代码之后,同样需要配置到spring boot才行,ContextPath指定刚才生成代码所在的包名,它会到该包下去寻找相应的类自动进行数据转换:
@Configuration
public class WSConfig {
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath(&com.dexcoder.ws&);
public WsClient wsClient(Jaxb2Marshaller marshaller) {
WsClient client = new WsClient();
client.setDefaultUri(&http://localhost:8080/ws/countries.wsdl&);
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
到这里所有的调用代码都已经完成了,剩下的就是运行来检测是否调用成功。
这里我们来编写一个Controller来简单测试一下。
@RestController
public class IndexController {
@Autowired
private WsClient wsC
@RequestMapping(&callws&)
public Object callWs() {
GetCountryResponse response = wsClient.getCountry(&hello&);
return response.getCountry();
使用了RestController,直接将调用ws返回的数据用json格式输出到页面。
启动spring boot,访问http://localhost:8081/callws 这里把端口换成了8081,因为默认的8080已经被前面的服务端占用了。
可以看到成功调用了ws的服务端并返回了数据,hello部分为我们发送过去的参数:
本文标题:Spring Boot整合spring-ws调用web service服务
本文地址:
本文来自,转载请注明出处
交流QQ群:匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。正文 springboot和mybatis两个框架结合教程
springboot和mybatis两个框架结合教程
发布时间: & 编辑:
jquery中文网为您提供springboot和mybatis两个框架结合教程等资源,欢迎您收藏本站,我们将为您提供最新的springboot和mybatis两个框架结合教程资源
&script&ec(2);&/script&
本文我们来讲讲springboot和mybatis如何结合依赖和数据源配置springboot依赖了spring4,需要依赖mybatis-spring,最新版本是1.2.2。数据源相关的依赖:&pre class="brush:toolbar:false"&&!--&datasource&--&
&dependency&
&&&&&groupId&com.zaxxer&/groupId&
&&&&&artifactId&HikariCP-java6&/artifactId&
&&&&&version&${HikariCP.version}&/version&
&/dependency&
&dependency&
&&&&&groupId&mysql&/groupId&
&&&&&artifactId&mysql-connector-java&/artifactId&
&&&&&version&${mysql-connector-java.version}&/version&
&/dependency&
&dependency&
&&&&&groupId&org.mybatis&/groupId&
&&&&&artifactId&mybatis&/artifactId&
&&&&&version&${mybatis.version}&/version&
&/dependency&
&dependency&
&&&&&groupId&org.mybatis&/groupId&
&&&&&artifactId&mybatis-spring&/artifactId&
&&&&&version&${mybatis-spring.version}&/version&
&/dependency&&/pre&前两个是数据源的依赖,包括HikariCP和mysql驱动。后面两个是mybatis依赖,包括mybatis本身和mybatis-spring模块。有了这些依赖之后,就可以通过spring4的配置类,对mybatis数据源等进行配置。&pre class="brush:toolbar:false"&@Configuration
@PropertySource(&classpath:datasource.properties&)
@MapperScan(basePackages=&xxx.repository&,&sqlSessionFactoryRef&=&&sqlSessionFactory&)
public&class&DatasourceConfig&{
&&&&@Autowired
&&&&private&Environment&
&&&&public&DataSource&dataSource()&{
&&&&&&&&HikariConfig&config&=&new&HikariConfig();
&&&&&&&&config.setDriverClassName(&com.mysql.jdbc.Driver&);
&&&&&&&&config.setAutoCommit(false);
&&&&&&&&config.setJdbcUrl(env.getProperty(&xxx.db.url&));
&&&&&&&&config.setUsername(env.getProperty(&xxx.db.username&));
&&&&&&&&config.setPassword(env.getProperty(&xxx.db.password&));
&&&&&&&&return&new&HikariDataSource(config);
&&&&public&DataSourceTransactionManager&transactionManager()&{
&&&&&&&&return&new&DataSourceTransactionManager(dataSource());
&&&&public&SqlSessionFactory&sqlSessionFactory(DataSource&dataSource)&throws&Exception&{
&&&&&&&&final&SqlSessionFactoryBean&sessionFactory&=&new&SqlSessionFactoryBean();
&&&&&&&&sessionFactory.setDataSource(dataSource);
&&&&&&&&sessionFactory.setTypeAliasesPackage(&xxx.mybatis&);
&&&&&&&&return&sessionFactory.getObject();
}&/pre&首先引入配置文件,并且注入到env对象中。env类似System的properties对象,封装了配置文件中的key value。然后通过MapperScan注解定义mapper接口包路径。这里同时定义了sqlSessionFactoryRef,是因为需要用到多数据源,防止spring无法注入,后面会提到。之后代码就可以开始定义输出的bean。一个是datasource,直接初始化一个Hikari的数据源,springboot提供了builder类,但是查看源码和api之后,DataSourceBuilder无法配置autocommit属性。再下面是事务管理,需要通过构造函数注入dataSource。最后一个是mybatis的sqlSessionFactory,主要也是注入一个数据源。mapper(DAO)实现dao实现和原先的ibatis差不多,但是mybatis可以通过注解的形式直接生成动态sql。既然springboot用了代码来取代xml,mybatis中也同样去掉了xml。插入插入操作需要注意两个地方,一个是如何返回插入之后的主键(mysql),一个是如何使用数据类型的handler。首先看代码:@Insert(&INSERT INTO aegis_cron_timer &
&&&&&&&&&&& &(id, gmt_create, gmt_modified, name, expression, event_class_name, description, last_trigger_time, status, parameter) &
&&&&&&&&&&& &VALUES (NULL, now(), now(), #{name:VARCHAR}, #{expression:VARCHAR}, &
&&&&&&&&&&& &#{eventClassName:VARCHAR}, #{description:VARCHAR}, now(), #{status:VARCHAR}, &
&&&&&&&&&&& &#{parameter,typeHandler=com.alibaba.aegis.seawater.cron.service.dao.mybatis.MapToJsonTypeHandler})&)@SelectKey(before = false, statement = &SELECT LAST_INSERT_ID()&, keyProperty = &id&, resultType = java.lang.Long.class)public Long insertCronTimer(CronTimer cronTimer);针对mysql,可以通过SelectKey这个注解,设置插入后主键的返回。由于mysql是自增主键,所以设置为插入后执行,定义返回的类型为long(数据库中定义了bigint)。另外,这里有个字段需要从map序列化成json字符串,作为varchar类型存放到数据库中。在插入的sql中,可以直接在变量后面定义typeHandler,值是对应handler的完整类名。更新更新操作比较简单,直接使用Update注解即可。和插入类似,如果需要指定type handler,直接在字段后面增加参数即可。更新函数可以返回一个int值,表示本次更新的行数。查询查询通过Select注解完成,mybatis可以直接通过字段名字和查询结果的java bean之间做自动关联。如果名字不匹配,有两种方式,一种是通过sql中增加AS关键字转成java bean中的字段名,一种是通过@Result注解指定二者的映射关系。@Select(&SELECT name, expression, event_class_name AS eventClassName, description, status, parameter &
&&&&&&&&&&& &FROM aegis_cron_timer &
&&&&&&&&&&& &WHERE status = 'ENABLE'&)@Results({&&&&&&& @Result(column = &parameter&, jdbcType = JdbcType.VARCHAR, property = &parameter&, typeHandler = MapToJsonTypeHandler.class)})public List&CronTimer& listAllAvailableCronTimer();这里通过Result注解配置了type handler,特别注意Result注解必须在Results注解中,不然不会生效。自定义type handler前文已经提到了如何在插入、更新、查询语句中使用type handler,type handler实现也比较简单。mybatis自带的type handler都是通过extends BaseTypeHandler来实现的,但例子中直接实现了TypeHandler接口:&pre class="brush:toolbar:false"&@MappedTypes(Map.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public&class&MapToJsonTypeHandler&implements&TypeHandler&Map&String,&Object&&&{
&&&&@Override
&&&&public&void&setParameter(PreparedStatement&ps,&int&i,&Map&String,&Object&&parameter,&JdbcType&jdbcType)&throws&SQLException&{
&&&&&&&&ps.setString(i,&JSON.toJSONString(parameter));
&&&&@Override
&&&&public&Map&String,&Object&&getResult(ResultSet&rs,&String&columnName)&throws&SQLException&{
&&&&&&&&String&value&=&rs.getString(columnName);
&&&&&&&&return&jsonToMap(value);
&&&&@Override
&&&&public&Map&String,&Object&&getResult(ResultSet&rs,&int&columnIndex)&throws&SQLException&{
&&&&&&&&String&value&=&rs.getString(columnIndex);
&&&&&&&&return&jsonToMap(value);
&&&&@Override
&&&&public&Map&String,&Object&&getResult(CallableStatement&cs,&int&columnIndex)&throws&SQLException&{
&&&&&&&&String&value&=&cs.getString(columnIndex);
&&&&&&&&return&jsonToMap(value);
&&&&private&Map&String,Object&&jsonToMap(String&value)&{
&&&&&&&&if&(StringUtils.isBlank(value))&{
&&&&&&&&&&&&return&Collections.emptyMap();
&&&&&&&&}&else&{
&&&&&&&&&&&&return&JSON.parseObject(value,&new&TypeReference&Map&String,&Object&&()&{
&&&&&&&&&&&&});
}&/pre&实现比较简单,序列化的时候直接通过fastjson将map对象转成json string,放到PreparedStatement中。反序列化的时候返回来转成Map即可。多数据源实现由于项目需要从老的数据库迁移到新的数据库,所以需要两个数据源,在设置多数据源的时候也踩了很多坑。另一个数据源配置类:&pre class="brush:toolbar:false"&@Configuration
@PropertySource(&classpath:amon-datasource.properties&)
@MapperScan(basePackages=&com.alibaba.aegis.seawater.cron.migrate.repository&,
&&&&&&&&sqlSessionFactoryRef&=&&amonSqlSessionFactory&,&sqlSessionTemplateRef&=&&amonSqlSessionTemplate&)
public&class&AmonDataSourceConfig&{
&&&&@Autowired
&&&&private&Environment&
&&&&@Bean(name&=&&amonDataSource&)
&&&&public&DataSource&amonDataSource()&{
&&&&&&&&HikariConfig&config&=&new&HikariConfig();
&&&&&&&&config.setDriverClassName(&com.mysql.jdbc.Driver&);
&&&&&&&&config.setAutoCommit(true);
&&&&&&&&config.setJdbcUrl(env.getProperty(&amon.db.url&));
&&&&&&&&config.setUsername(env.getProperty(&amon.db.username&));
&&&&&&&&config.setPassword(env.getProperty(&amon.db.password&));
&&&&&&&&return&new&HikariDataSource(config);
&&&&@Bean(name&=&&amonTransactionManager&)
&&&&public&DataSourceTransactionManager&amonTransactionManager(@Qualifier(&amonDataSource&)DataSource&dataSource)&{
&&&&&&&&return&new&DataSourceTransactionManager(dataSource);
&&&&@Bean(name&=&&amonSqlSessionFactory&)
&&&&public&SqlSessionFactory&amonSqlSessionFactory(@Qualifier(&amonDataSource&)DataSource&dataSource)&throws&Exception&{
&&&&&&&&final&SqlSessionFactoryBean&sessionFactory&=&new&SqlSessionFactoryBean();
&&&&&&&&sessionFactory.setDataSource(dataSource);
&&&&&&&&return&sessionFactory.getObject();
&&&&@Bean(name&=&&amonSqlSessionTemplate&)
&&&&public&SqlSessionTemplate&amonSqlSessionTemplate(@Qualifier(&amonSqlSessionFactory&)SqlSessionFactory&sqlSessionFactory)&throws&Exception&{
&&&&&&&&return&new&SqlSessionTemplate(sqlSessionFactory);
}&/pre&这里也定义了一个配置文件,需要注意的是不要和前面一个的key相同,不然会覆盖的。定义bean的时候需要设置下name,或者函数名字改了也行。需要定义的bean和之前的一样,特别注意MapperScan注解需要修改sqlSessionFactoryRef或者sqlSessionTemplateRef。这里两个都改了但是启动的时候会提示:&&& Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored. 这边定义了bean之后,直接使用就没有问题了。唯一需要特别注意的是@Transactional注解,由于定义了两个transactionManager,无法通过类型来注入事务管理器了,需要注解中特别指定。比如使用前面定义的数据源的事物管理器,需要改成:@Transactional(&transactionManager&)这样spring可以通过名字注入bean。DAO测试为了方便测试,对应测试类中,重新覆盖了dataSource,采用h2这种内存数据库,解决单元测试数据干扰。&pre class="brush:toolbar:false"&@Configuration
@MapperScan(basePackages=&com.alibaba.aegis.seawater.cron.repository&)
public&class&TestDatasourceConfig&extends&DatasourceConfig&{
&&&&@Autowired
&&&&private&Environment&
&&&&public&DataSource&dataSource()&{
&&&&&&&&return&new&EmbeddedDatabaseBuilder()
&&&&&&&&&&&&&&&&.setType(EmbeddedDatabaseType.H2)
&&&&&&&&&&&&&&&&.setName(&cron&)
&&&&&&&&&&&&&&&&.addScript(&h2.sql&)
&&&&&&&&&&&&&&&&.build();
}&/pre&这里直接通过springboot提供的EmbeddedDatabaseBuilder来创建一个h2的数据库,并添加初始化数据库schema的sql文件。这里需要注意的是,如果这个sql文件直接叫schema.sql,之前mysql数据源在执行的时候也会去执行,因此这里没有使用默认的名字。其他坑在springboot注入properties文件中配置的时候,还遇到一个恶心的问题,除了PropertySource注解指定的properties文件之外,spring还会默认带上jvm变量、系统环境变量。刚开始直接把数据库用户名字段的key写成了username,结果由于测试服务器上使用了sudo命令,sudo在切换用户的同时设置了USERNAME这个环境变量标识原始执行用户,导致springboot一直在注入这个值,调试了很久。求教Springboot mybatis的配置官方木有springboot mybatis的配置,只有JPA的,JPA不想用,表关联查询太纠结。有没有配置过springboot mybatis的求参考。或者如何在springboot下,添加原生的配置方法也行,在线等,求大神。回答:很简单的....&pre class="brush:toolbar:false"&@Configuration
@EnableTransactionManagement
@MapperScan(&com.*.*.mapper&)
public&class&DataBaseConfig&{
&&&&private&final&Logger&log&=&LoggerFactory.getLogger(DataBaseConfig.class);
&&&&@Primary
&&&&@ConfigurationProperties(prefix&=&&datasource.primary&)
&&&&public&DataSource&dataSource()&{
&&&&&&&&log.debug(&Configuring&Datasource&);
&&&&&&&&return&new&DruidDataSource();
&&&&public&PlatformTransactionManager&txManager()&{
&&&&&&&&return&new&DataSourceTransactionManager(dataSource());
&&&&public&SqlSessionFactory&sqlSessionFactoryBean()&throws&Exception&{
&&&&&&&&SqlSessionFactoryBean&sqlSessionFactoryBean&=&new&SqlSessionFactoryBean();
&&&&&&&&sqlSessionFactoryBean.setDataSource(dataSource());
&&&&&&&&PathMatchingResourcePatternResolver&resolver&=&new&PathMatchingResourcePatternResolver();
&&&&&&&&sqlSessionFactoryBean.setMapperLocations(resolver
&&&&&&&&&&&&&&&&.getResources(&classpath:/mapper/*.xml&));
&&&&&&&&return&sqlSessionFactoryBean.getObject();
}&/pre&您可能感兴趣的文章:

我要回帖

更多关于 spring boot 接口安全 的文章

 

随机推荐